Android Gradle fügt einem Projekt eine externe Bibliothek und verschachtelte externe Bibliotheken hinzu
-
20-12-2019 - |
Frage
Wie füge ich eine externe Bibliothek und verschachtelte externe Bibliotheken zu einem Android-Projekt hinzu?
Meine Projektstruktur (Änderung nicht gestattet)
- Apps/
- App1/
- build.gradle
- Einstellungen.gradle
- Bibliotheken/
- Bibliothek1/
- build.grade
- Einstellungen.gradle
- Bibliothek2/
- build.grade
- Einstellungen.gradle
- Bibliothek3/
- build.grade
- Einstellungen.gradle
- Bibliothek4/
- build.grade
- Einstellungen.gradle
- Bibliothek1/
- App1/
App1
App1/build.gradle
buildscript {
...
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:libraries:library1')
compile project(':..:libraries:library2')
compile project(':..:libraries:library3')
compile project(':..:libraries:library4')
}
android {
...
}
App1 hängt nicht direkt davon ab library3
oder library4
, Es wird sich jedoch beschweren, wenn ich sie nicht in die Abhängigkeiten einbeziehe build.gradle
Datei und die settings.gradle
Datei.Deshalb habe ich sie eingefügt, nur um zu verhindern, dass es zu Beschwerden kommt.
App1/settings.gradle
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
Bibliothek1
Bibliothek1/build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:library3')
compile project(':..:library4')
}
android {
...
}
Bibliothek1/settings.gradle
include ':'
include '..:library3'
include '..:library4'
Bibliothek2..4
Bibliothek2..4/build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
...
}
Bibliothek2..4/settings.gradle
include ':'
Beim Versuch gradlew clean build
An App1
Ich erhalte die folgende Fehlermeldung:
FAILURE: Build failed with an exception.
* Where:
Build file '/home/user/projects/branches/branch1/Apps/libraries/library1/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating project ':..:library:library1'.
> Project with path ':..:library3' could not be found in project ':..:library:library1'.
Zeile 15 ist compile project(':..:library3')
im library1/build.gradle
Datei.
Wie füge ich eine externe Bibliothek und verschachtelte externe Bibliotheken zu einem Android-Projekt hinzu?
Lösung
Führen Sie in der Datei „settings.gradle“ (App1/settings.gradle) der obersten Ebene für jede Bibliothek Folgendes aus
include ':library1'
include ':library2'
include ':library3'
include ':library4'
project(':library1').projectDir = new File(rootProject.projectDir, '../libraries/library1')
project(':library2').projectDir = new File(rootProject.projectDir, '../libraries/library2')
project(':library3').projectDir = new File(rootProject.projectDir, '../libraries/library3')
project(':library4').projectDir = new File(rootProject.projectDir, '../libraries/library4')
Entfernen Sie die anderen Settings.gradle-Dateien, Sie benötigen sie nicht
dann müssen Sie in jedem Build-Skript nur noch verwenden
compile project (':library1')
compile project (':library2')
etc....
Wie oben erwähnt, verwenden Sie einfach eine einzelne Datei „settings.gradle“ im Stammprojekt (App1).
Dann aus Ihrem App1-Ordner ausführen gradlew clean :library1:build
um zu überprüfen, ob Bibliothek1 korrekt erstellt wird.
Was das Problem betrifft, dass App1 sich über fehlende Bibliotheken 3 und 4 beschwert, sind Sie sicher, dass in der App kein Code vorhanden ist, der direkt auf diese Bibliotheken verweist, oder dass die Bibliotheken beim Kompilieren von Bibliothek1 nicht gefunden werden?Erstellen Sie jede Bibliothek einzeln, um sicherzustellen, dass sie alle ordnungsgemäß erstellt werden.
Andere Tipps
Eine Frage.Benötigen Sie diesen Abhängigkeitsbaum?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
Wenn ja, muss Ihre App die Bibliotheken 3 und 4 nicht importieren.Diese Abhängigkeiten sind über die Bibliothek 1 verfügbar.
Informationen zu Settings.gradle-Dateien.Warum eines in jedem Modul?Diese Datei wird nur im Root-Projekt (wie dem Eclipse-Arbeitsbereich) verwendet, um auf Ihre Module zu verweisen (App, Bibliothek 1, Bibliothek 2 usw.).
Hilft Ihnen das?
Ich mache das für relative Pfade:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'