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

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?

War es hilfreich?

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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top