Próbuję migrować projekt z Eclipse, ale nic, co próbowałem, nie działa. W Eclipse mam 3 projekty (2 projekty aplikacji na Androida i 1 projekt biblioteki dla Androida). Te 2 projekty aplikacji zależą od projektu biblioteki. Kiedy wykonuję eksport Gradle, otrzymuję 3 projekty, które nie działają. Jestem otwarty na restrukturyzację projektu, ale nie znalazłem żadnej dokumentacji, jak to zrobić.
Czy istnieje sposób, aby 3 projekty eksportowane przez Eclipse współpracowały ze sobą? Czy lepiej będzie dla mnie restrukturyzacja, a jeśli tak, to czy dokumentacja, jak to zrobić?
Aktualizacja
Wgrałem cały projekt do GitHub https://github.com/respectTheCode/android-studio-library-example
Zaktualizuj 1
Opierając się na sugestiach Padmy Kumara, próbowałem tego.
- Utwórz nowy projekt o nazwie
MyApp
- Kliknij
File > New Module
, wybierzAndroid Library
i nazwijMyLib
- Kliknij
Build > Make Project
Kompilacja kończy się niepowodzeniem z powodu tego błędu
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
Następnie dodałem package
atrybut do manifestu, który go tworzy
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Po zbudowaniu pojawia się ten błąd
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
Wydaje się, że dodanie zależności nie ma żadnego wpływu na błąd. Kontynuując z góry
- Kliknij
File > Project Structure > Modules > MyApp-MyApp
- Przejdź do
Dependencies
karty - Kliknij
+ > Module Dependency
i wybierzMyLib
- Kliknij
Apply
iOK
- Kliknij
Build > Make Project
Zaktualizuj 2
Na podstawie sugestii Ethana otrzymujemy to
Wydaje się, że 2 podprojekty build.gradle
mają wszystkie poprawne części, a jedyną różnicą jest to, że linia wtyczki poniżej to MyApp/build.gradle
.
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
Projekt główny build.gradle
był pusty, więc dodałem dwa takie projekty
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Teraz pojawia się ten błąd podczas budowania
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Zaktualizuj 3
Wielkie dzięki Ethan za rozwiązanie tego problemu.
- Dodaj
compile project(':SubProjects:MyLib')
doMyLib/build.gradle
- Usuń
compile files('libs/android-support-v4.jar')
zMyLib/build.gradle
- Zamknij projekt i zaimportuj główny projekt z Gradle
Zaktualizuj 4
Od wersji 0.1.2 możesz teraz uwzględniać compile "com.android.support:support-v4:13.0.0"
zamiast compile files('libs/android-support-v4.jar')
. Ponieważ teraz pochodzi z mavin, możesz bez problemu uwzględnić to w wielu projektach.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
Zaktualizuj 5
Od wersji 0.1.3 na pasku narzędzi znajduje się przycisk „Synchronizuj projekt”. Możesz to kliknąć, zamiast ponownie importować projekt po wprowadzeniu zmian w .gradle
plikach.
compile 'com.google.android:support-v4:r6'
do każdego swojego projektu wtyczkę maven (jak w przykładzie build.gradle poniżej) zamiast compile files('libs/android-support-v4.jar')
gradle, zdasz sobie sprawę, że oba projekty zawierają to samo i uwzględnią to tylko raz.