Wie man ein Android-Projekt als Bibliothek importiert und NICHT als apk kompiliert (Android Studio 1.0)

120

Ich habe versucht, ein Projekt (projLib) als Abhängigkeit für ein anderes Projekt (projAPK) zu importieren.

projAPK gradle hat folgendes:

dependencies {
    compile project(':libs:NewsAPI')
    compile project(':projLib')
}

aber wenn ich den Gradle synchronisiere, gibt es diesen Fehler:

Fehler: Abhängigkeit Android_2015: projLib: Nicht angegeben im Projekt projAPK wird in ein APK-Archiv aufgelöst, das nicht als Kompilierungsabhängigkeit unterstützt wird. Datei: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

Ich denke, es gibt zwei Lösungen dafür:

  1. irgendwie gradle denken lassen, dass projLib eine bibliothek ist, die nicht zu apk kompiliert werden sollte
  2. irgendwie machen gradle die projLib NICHT explizit kompilieren

Das Problem ist, ich konnte nichts davon finden. Wäre super wenn ihr helfen könnt :)

Vic Zhou
quelle

Antworten:

330

In der build.gradle -Datei von projLib sehen Sie eine Anweisung wie folgt:

apply plugin: 'com.android.application'

Dadurch wird Gradle angewiesen, es als Anwendung zu erstellen und eine APK zu generieren. Wenn Sie dies ändern:

apply plugin: 'com.android.library'

Es wird als Bibliothek erstellt und generiert einen AAR. Es sollte funktionieren.

Wenn Sie projLib auch benötigen , um ein separates APK zu generieren, müssen Sie einige Umgestaltungen vornehmen , um den benötigten allgemeinen Code in ein drittes Bibliotheksmodul zu übertragen, und beide APKs hängen davon ab.

Bibliotheken dürfen keine festlegen. applicationIdWenn Sie eine entsprechende Fehlermeldung sehen, entfernen Sie diese aus dem Erstellungsskript der Bibliothek.

Scott Barta
quelle
Vielen Dank, Sir, das hat funktioniert. Gibt es eine Lektüre / Dokumentation, die Sie mir zu diesen Plugin-Dingen empfehlen können?
Vic Zhou
13
Ich habe das versucht und einen neuen Fehler erhalten: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.Das StaggeredGridViewDemo ist ein Paket in der Bibliothek, die ich als Modul importieren wollte.
Azurespot
13
Ich habe gerade die Anwendungs-ID-Zeile aus defaultConfig {} entfernt und es hat funktioniert.
Ericharlow
Außerdem müssen Sie 'tools: replace = "android: icon" in der <application ...> ...
hinzufügen
24

In Modul Gradle Datei -

Ersetzen apply plugin: 'com.android.application' durchapply plugin: 'com.android.library'

Dann entfernen applicationId "xxx.xxx.xxxx"

Reinigen und bauen

san88
quelle
Alles ist in Modul Gradle-Datei
Vlad
1

Fügen Sie diese Zeilen einfach zur Bibliotheksdatei hinzu gradleund entfernen Sie andere Abschnitte

apply plugin: 'com.android.library'

android {
   compileSdkVersion 23
   buildToolsVersion '23.0.2'
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.squareup.picasso:picasso:2.4.0'
   compile 'com.google.code.gson:gson:2.2.4'
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile 'com.android.support:gridlayout-v7:23.1.1'
  ,...
}
Hamidreza Sadegh
quelle