Jak zbudować bibliotekę Androida za pomocą Android Studio i gradle?
Próbuję przenieść projekt z Eclipse, ale nic nie działa. W Eclipse mam 3 projekty (2 projekty aplikacji na Androida i 1 projekt biblioteki na Androida). 2 projekty aplikacji zależą od projektu biblioteki. Kiedy robię eksport gradle dostaję 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, które eksportują Eclipse, działały razem? Czy mi lepiej restrukturyzacja rzeczy, a jeśli tak to dokumentacja jak to zrobić?
Update
Załadowałem cały projekt na GitHub https://github.com/respectTheCode/android-studio-library-example
Update 1
Opierając się na sugestiach Padmy Kumara, to jest to, czego próbowałem.
- Utwórz nowy projekt o nazwie
MyApp
- Kliknij
File > New Module
, wybierzAndroid Library
i nazwij goMyLib
- Kliknij
Build > Make Project
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 czyniąc go
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Po zbudowaniu dostaję 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
Dodanie zależności nie wydaje się mieć żadnego wpływu na błąd. Kontynuując z góry
- Kliknij
File > Project Structure > Modules > MyApp-MyApp
- Przełącz na
Dependencies
zakładkę - Kliknij
+ > Module Dependency
i wybierzMyLib
- Kliknij
Apply
iOK
- Kliknij
Build > Make Project
Aktualizacja 2
Na podstawie sugestii od Ethana tutaj otrzymujemy
Projekt 2 build.gradle
wydaje się mieć wszystkie poprawne części i jedyną różnicą jest linia wtyczki poniżej jest 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 root build.gradle
był pusty, więc dodałem dwa projekty takie jak ten
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Teraz dostaję 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.
Update 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
Update 4
Od wersji 0.1.2 możesz teraz dołączyć compile "com.android.support:support-v4:13.0.0"
zamiast compile files('libs/android-support-v4.jar')
. Ponieważ pochodzi z mavin, możesz to bez problemów włączyć do wielu projektów.
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')
}
Update 5
Od wersji 0.1.3 na pasku narzędzi znajduje się przycisk "Synchronizuj projekt". Możesz kliknąć to, zamiast ponownie zaimportować projekt po dokonaniu zmian w plikach .gradle
.
4 answers
Uwaga: ta odpowiedź jest czystą odpowiedzią Gradle, używam tego w IntelliJ na bieżąco, ale nie wiem, jak jest integracja z Android Studio. Wierzę, że wiem, co się dla mnie dzieje, więc tak używam Gradle i Androida.
TL; DR Pełny przykład- https://github.com/ethankhall/driving-time-tracker/
Disclaimer: jest to projekt, nad którym pracuję.
Gradle ma zdefiniowane struktura (którą możesz zmienić, link na dole mówi ci, jak ) jest bardzo podobna do Mavena, jeśli kiedykolwiek go używałeś.
Project Root
+-- src
| +-- main (your project)
| | +-- java (where your java code goes)
| | +-- res (where your res go)
| | +-- assets (where your assets go)
| | \-- AndroidManifest.xml
| \-- instrumentTest (test project)
| \-- java (where your java code goes)
+-- build.gradle
\-- settings.gradle
Jeśli masz tylko jeden projekt, ustawienia.plik gradle nie jest potrzebny. Jednak chcesz dodać więcej projektów, więc potrzebujemy go.
[10]} Teraz rzućmy okiem na tę konstrukcję.plik gradle. W tym celu należy dodać narzędzia do systemu android.]}Buduj.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.3'
}
}
Teraz musimy powiedzieć Gradle ' owi o niektórych Części Androida. To dość proste. Podstawowy (który działa w większości moich przypadków) wygląda następująco. Mam komentarz w tym bloku, to pozwoli mi określić nazwę wersji i Kod podczas generowania APK.
Buduj.gradle
apply plugin: "android"
android {
compileSdkVersion 17
/*
defaultConfig {
versionCode = 1
versionName = "0.0.0"
}
*/
}
Coś, co chcemy dodać, aby pomóc każdemu, kto nie widział jeszcze Światła Gradle, sposób na korzystanie z projektu bez instalowania go.
Buduj.gradle
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
gradleVersion = '1.4'
}
Więc teraz mamy jeden projekt do zbudowania. Teraz dodamy Pozostałe. Umieszczam je w katalogu, może nazwałbym to deps, albo podprojektami. To nie ma znaczenia, ale musisz wiedzieć, gdzie go umieścić. Aby powiedzieć Gradle, gdzie są projekty, musisz dodać je do ustawień.gradle.
Struktura Katalogów:
Project Root
+-- src (see above)
+-- subProjects (where projects are held)
| +-- reallyCoolProject1 (your first included project)
| \-- See project structure for a normal app
| \-- reallyCoolProject2 (your second included project)
| \-- See project structure for a normal app
+-- build.gradle
\-- settings.gradle
Ustawienia.gradle:
include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'
Ostatnią rzeczą, której powinieneś się upewnić, to podprojekty / reallyCoolProject1 / build.gradle ma apply plugin: "android-library"
zamiast apply plugin: "android"
.
Jak każdy projekt Gradle (i Maven) musimy teraz powiedzieć projektowi root o jego zależności. Może to również obejmować dowolne normalne zależności Java, które chcesz.
Buduj.gradle
dependencies{
compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
compile project(":subProjects:reallyCoolProject1")
compile project(':subProjects:reallyCoolProject2')
}
Wiem, że to wydaje się dużo kroków, ale są one dość łatwe, gdy robisz to raz lub dwa. Ten sposób pozwoli Ci również zbudować na serwerze CI, zakładając, że masz Androida SDK zainstalowany tam.
NDK Uwaga: Jeśli zamierzasz używać NDK, będziesz potrzebował czegoś takiego jak poniżej. Przykładowa Budowa.plik gradle można znaleźć tutaj: https://gist.github.com/khernyo/4226923
Buduj.gradle
task copyNativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniDir new File('build/native-libs')
}
Źródła:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 18:19:43
Właśnie miałem bardzo podobne problemy z Gradle builds / adding .biblioteka jar. Działa mi przez kombinację:
- przeniesienie folderu libs do katalogu głównego projektu (tego samego katalogu co 'src') i dodanie biblioteki do tego folderu w Finderze (przy użyciu Mac OS X)
- W Android Studio kliknij prawym przyciskiem myszy folder, aby dodać go jako bibliotekę
- Edycja zależności w kompilacji.gradle file, dodanie
compile fileTree(dir: 'libs', include: '*.jar')}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-04 16:58:55
Oto moje rozwiązanie dla użytkowników mac myślę, że działa również dla Windowsa:
Najpierw przejdź do paska narzędzi Android Studio
Build > Make Project (gdy jesteście online niech ściągnie pliki) a następnie
Build > Compile Module "your app name is showed here" (still online let the files are
Pobierz i Zakończ), a następnie
Uruchom aplikację, która zostanie wykonana uruchomi emulator i skonfiguruje go więc uruchom go!
To jest to!!! Happy coding guys!!!!!!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-24 21:36:27
Gradle Build Tools 2.2.0+ - wszystko po prostu działa
To jest prawidłowy sposób, aby to zrobić
Starając się uniknąć eksperymentalnych i szczerze mówiąc dość NDK i całej jego hackery jestem zadowolony, że 2.2.x Z Narzędzi Gradle Build wyszedł i teraz po prostu działa. Klucz jest externalNativeBuild
i wskazuje ndkBuild
argument ścieżki na Android.mk
lub zmienia ndkBuild
na cmake
i wskazuje argument ścieżki na CMakeLists.txt
skrypt budowania.
android {
compileSdkVersion 19
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 19
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86'
}
externalNativeBuild {
cmake {
cppFlags '-std=c++11'
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_PLATFORM=android-19',
'-DANDROID_STL=gnustl_static',
'-DANDROID_ARM_NEON=TRUE',
'-DANDROID_CPP_FEATURES=exceptions rtti'
}
}
}
externalNativeBuild {
cmake {
path 'src/main/jni/CMakeLists.txt'
}
//ndkBuild {
// path 'src/main/jni/Android.mk'
//}
}
}
Aby uzyskać więcej szczegółów sprawdź Google ' s strona o dodawaniu kodu natywnego .
Po prawidłowej konfiguracji możesz ./gradlew installDebug
i iść. Musisz również mieć świadomość, że NDK przenosi się do clang, ponieważ gcc jest teraz przestarzały w Android NDK.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-23 09:03:20