Wie baue ich eine Android-Bibliothek mit Android Studio und Gradle?

Ich versuche, ein Projekt von Eclipse zu migrieren, aber nichts, was ich versucht habe, funktioniert. In Eclipse habe ich 3 Projekte (2 android App Projekte und 1 Android Library Projekt). Die 2 App-Projekte hängen vom Bibliotheksprojekt ab. Wenn ich den gradle-Export mache, bekomme ich 3 Projekte, die nicht funktionieren. Ich bin offen für die Umstrukturierung des Projekts, habe aber keine Dokumentation darüber gefunden, wie dies geschehen soll.

Gibt es eine Möglichkeit, die 3 Projekte zu machen, die Eclipse Exporte zusammenarbeiten? Bin ich besser von der Umstrukturierung von Sachen und wenn ja, ist eine Dokumentation dafür, wie dies geschehen soll?

Aktualisieren

Ich habe das gesamte Projekt auf GitHub https://github.com/respectTheCode/android-studio-library-example hochgeladen

Update 1

Basierend auf den Vorschlägen von Padma Kumar das ist, was ich versucht habe

  1. Erstellen Sie ein neues Projekt namens MyApp
  2. Klicken Sie auf File > New Module , wählen Sie Android Library und benennen Sie es MyLib
  3. Klicken Sie auf Build > Make Project

Der Build scheitert mit diesem Fehler

 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. 

Ich habe dann ein package dem Manifest hinzugefügt

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" > 

Nach dem Bau bekomme ich diesen Fehler

 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 

Hinzufügen von Abhängigkeit scheint keine Auswirkungen auf den Fehler zu haben. Weiter von oben

  1. Klicken Sie auf File > Project Structure > Modules > MyApp-MyApp
  2. Wechseln Sie in die Registerkarte Dependencies
  3. Klicken Sie auf + > Module Dependency MyLib und wählen Sie MyLib
  4. Klicken Sie auf Apply und auf OK
  5. Klicken Sie auf Build > Make Project

Update 2

Basierend auf den Vorschlägen von Ethan das ist, wo wir bekommen

Die 2 Sub-Projekt build.gradle scheinen alle korrekten Teile zu haben und der einzige Unterschied ist die Plugin-Linie, die das 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 } } 

Das Wurzelprojekt build.gradle war leer, also habe ich die beiden Projekte so hinzugefügt

 dependencies { compile project(":MyLib") compile project(":MyApp") } 

Ich bekomme jetzt diesen Fehler beim Bauen

 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

Vielen Dank Ethan für die Lösung dieses.

  1. compile project(':SubProjects:MyLib') zum MyLib/build.gradle
  2. Entfernen Sie compile files('libs/android-support-v4.jar') aus dem MyLib/build.gradle
  3. Schließen Sie das Projekt und importieren Sie das Root-Projekt von gradle

Update 4

Ab 0.1.2 kannst du jetzt auch compile "com.android.support:support-v4:13.0.0" anstatt compile files('libs/android-support-v4.jar') . Da es jetzt von mavin kommt, kannst du das problemlos in mehrere projekte einbinden.

 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

Ab 0.1.3 gibt es nun eine Schaltfläche "Sync Project" in der Symbolleiste. Sie können darauf klicken, anstatt Ihr Projekt erneut zu .gradle nachdem Sie Änderungen an .gradle Dateien vorgenommen haben.

  • Verwenden Sie einen anderen manifestPlaceholder für jede Build-Variante
  • Android-Projekt zu Cordova-Plugin - R.java nicht gefunden / erstellt
  • Schmerzhafte Unity-Projekt-Export in Android jeder bauen (ich mache etwas falsch)
  • Duplizieren von Dateien während der Verpackung eines APK
  • Wie strukturiere ich das Projekt-Testverzeichnis in Android Studio?
  • Fehler beim Importieren des neuen Gradle-Projekts: Fehler beim Erstellen von Build Tools Revision * .0.0
  • Android Studio Gradle Fehler bei Compile Time
  • Gitlab CI gradle Abhängigkeits-Cache
  • 4 Solutions collect form web for “Wie baue ich eine Android-Bibliothek mit Android Studio und Gradle?”

    Anmerkung : Diese Antwort ist eine reine Gradle Antwort, ich benutze diese in IntelliJ regelmäßig, aber ich weiß nicht, wie die Integration mit Android Studio ist. Ich bin ein Gläubiger zu wissen, was los ist für mich, so ist dies, wie ich Gradle und Android verwenden.

    TL; DR Volles Beispiel – https://github.com/ethankhall/driving-time-tracker/

    Haftungsausschluss : Dies ist ein Projekt, an dem ich arbeite.

    Gradle hat eine definierte Struktur (die Sie ändern können, Link an der Unterseite sagt Ihnen wie) das ist sehr ähnlich zu Maven, wenn Sie es jemals verwendet haben.

     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 

    Wenn Sie nur das eine Projekt haben, wird die Datei settings.gradle nicht benötigt. Allerdings möchten Sie weitere Projekte hinzufügen, also brauchen wir es.

    Jetzt lasst uns einen Blick auf diese build.gradle Datei nehmen. Du wirst das drin brauchen (um die Android-Tools hinzuzufügen)

    Build.gradle

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.3' } } 

    Jetzt müssen wir Gradle über einige der Android-Teile erzählen. Es ist ziemlich einfach. Eine grundlegende (die in den meisten meiner Fälle funktioniert) sieht wie folgt aus. Ich habe einen Kommentar in diesem Block, es wird mir erlauben, den Versionsnamen und Code bei der Erstellung der APK anzugeben.

    Build.gradle

     apply plugin: "android" android { compileSdkVersion 17 /* defaultConfig { versionCode = 1 versionName = "0.0.0" } */ } 

    Etwas, das wir hinzufügen wollen, um jemanden zu helfen, der das Licht von Gradle noch nicht gesehen hat, ein Weg für sie, das Projekt zu benutzen, ohne es zu installieren.

    Build.gradle

     task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) { gradleVersion = '1.4' } 

    So, jetzt haben wir ein Projekt zu bauen. Jetzt werden wir die anderen hinzufügen. Ich stelle sie in ein Verzeichnis, vielleicht nennen es Deps oder SubProjekte. Es spielt keine Rolle, aber du musst wissen, wo du es hinsetzt. Um zu sagen, Gradle, wo die Projekte sind, müssen Sie sie hinzufügen, um die Einstellungen.gradle.

    Verzeichnisstruktur:

     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 

    Settings.gradle:

     include ':subProjects:reallyCoolProject1' include ':subProjects:reallyCoolProject2' 

    Das letzte, was Sie sicherstellen sollten, ist die subProjects / reallyCoolProject1 / build.gradle hat apply plugin: "android-library" angewendet apply plugin: "android-library" statt apply plugin: "android" .

    Wie jedes Gradle-Projekt (und Maven) müssen wir nun das Wurzelprojekt über seine Abhängigkeit erzählen. Dies kann auch alle normalen Java-Abhängigkeiten, die Sie wollen.

    Build.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') } 

    Ich weiß, das scheint wie eine Menge Schritte, aber sie sind ziemlich einfach, sobald Sie es einmal oder zweimal tun. Auf diese Weise können Sie auch auf einem CI-Server aufbauen, vorausgesetzt, Sie haben das Android SDK dort installiert.

    NDK Side Hinweis: Wenn du das NDK benutzt hast, wirst du etwas wie unten brauchen. Beispiel build.gradle Datei finden Sie hier: https://gist.github.com/khernyo/4226923

    Build.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') } 

    Quellen:

    1. http://tools.android.com/tech-docs/new-build-system/user-guide
    2. https://gist.github.com/khernyo/4226923
    3. https://github.com/ethankhall/driving-time-tracker/

    Ich hatte gerade eine sehr ähnliche Probleme mit gradle baut / Hinzufügen .jar Bibliothek. Ich habe es funktioniert durch eine Kombination von:

    1. Bewegen Sie den libs-Ordner in den Stamm des Projekts (das gleiche Verzeichnis wie 'src') und fügen Sie die Bibliothek zu diesem Ordner in Finder (mit Mac OS X)
    2. Klicken Sie in Android Studio mit der rechten Maustaste auf den Ordner, der als Bibliothek hinzugefügt werden soll
    3. Bearbeiten der Abhängigkeiten in der Datei build.gradle, Hinzufügen von compile fileTree(dir: 'libs', include: '*.jar')}

    ABER wichtiger und ärgerlich, nur wenige Stunden nachdem ich es funktioniert habe, hat Android Studio gerade 0.3.7 veröffentlicht, was behauptet, eine Menge von Gradle-Problemen wie das Hinzufügen von .jar-Bibliotheken gelöst zu haben

    http://tools.android.com/recent

    Hoffe das hilft den Menschen!

    Hier ist meine Lösung für Mac-User ich denke, es funktioniert auch für Fenster:

    Gehen Sie zuerst zu Ihrer Android Studio-Symbolleiste

    Build> Make Project (während Sie Jungs online sind, lassen Sie es, um die Dateien herunterzuladen) und dann

    Build> Compile-Modul "dein App-Name wird hier angezeigt" (noch online lassen die Dateien sind
    Herunterzuladen und zu beenden) und dann

    Führen Sie Ihre App, die fertig ist, wird es Ihren Emulator starten und konfigurieren Sie es dann laufen!

    Das ist es!!! Glückliche Coding Jungs !!!!!!!

    Gradle Build Tools 2.2.0+ – Alles funktioniert einfach

    Dies ist der richtige Weg, es zu tun

    Wenn ich versuche, experimentelle und ehrlich gesagt mit dem NDK und all seinen Hacken zu versäumen, bin ich froh, dass 2.2.x der Gradle Build Tools herauskam und jetzt funktioniert es einfach. Der Schlüssel ist die ndkBuild und zeigt ndkBuild Pfad Argument bei einem Android.mk oder ändern ndkBuild zu cmake und zeigen das Pfad Argument in einem CMakeLists.txt Build-Skript.

     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' //} } } 

    Für viel mehr Details überprüfen Sie die Google-Seite auf das Hinzufügen von nativen Code .

    Danach ist das Setup korrekt eingerichtet. Sie müssen auch wissen, dass die NDK bewegt sich zu clang seit gcc ist jetzt in der Android NDK veraltet.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.