Bei Projekten mit vielen Modulen kann es schwierig sein, Android-Bibliotheken für Ihre Nutzer bereitzustellen und gleichzeitig eine klare Projektstruktur beizubehalten. In vielen Fällen müssen viel mehr Bibliotheken veröffentlicht werden als beabsichtigt.
Das Fused Library-Plug-in, das im Lieferumfang des Android Gradle-Plug-ins enthalten ist, unterstützt das Paketieren mehrerer Android-Bibliotheksmodule in einer einzigen veröffentlichbaren Android-Bibliothek. So können Sie den Quellcode und die Ressourcen Ihrer Bibliothek in Ihrem Build nach Belieben modularisieren und gleichzeitig verhindern, dass die Struktur Ihres Projekts nach der Bereitstellung offengelegt wird.
Die Bereitstellung als einzelne Bibliothek hat folgende Vorteile:
- Vereinfachte Abhängigkeiten:Mehrere Bibliotheksabhängigkeiten werden durch eine einzelne AAR ersetzt, wodurch die Projekteinrichtung und Versionsverwaltung für Nutzer optimiert wird.
- Verringerte Bibliotheksgröße:Kann die Codekomprimierung verbessern und zu kleineren AARs führen
- Erhöhte Sicherheit: Sie können die internen Implementierungsdetails veröffentlichter Bibliotheken besser steuern.
Zusammengeführte Bibliothek erstellen
Wenn Sie eine verschmolzene Bibliothek erstellen möchten, müssen Sie ein neues Android-Modul erstellen, Abhängigkeiten hinzufügen und die verschmolzene Bibliothek dann veröffentlichen.
Neues Fusionsbibliotheksmodul hinzufügen
Wenn Sie das Plug-in verwenden möchten, müssen Sie Ihrem Projekt ein neues Android-Modul hinzufügen:
In diesem Beispiel heißt das zusammengeführte Bibliotheksmodul myFusedLibrary
.
- Aktivieren Sie die Unterstützung für Fusionsbibliotheken, indem Sie der Datei
gradle.properties
android.experimental.fusedLibrarySupport=true
hinzufügen. - Hängen Sie
include(":myFusedLibrary")
an die Dateisettings.gradle.kts
an. - Fügen Sie in der Datei
gradle/libs.versions.toml
unter dem Abschnitt[plugins]
den Abschnittandroid-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
hinzu. - Fügen Sie
alias(libs.plugins.android.fusedlibrary) apply false
in der Dateibuild.gradle.kts
auf oberster Ebene im Block „plugins“ hinzu. - Erstellen Sie zum Erstellen des
myFusedLibrary
-Moduls ein neues Verzeichnis mit dem NamenmyFusedLibrary
. Klicken Sie dazu mit der rechten Maustaste auf „Meine Anwendung“ > „Neu“ > „Verzeichnis“. - Erstellen Sie im
myFusedLibrary
-Modul einebuild.gradle.kts
-Datei. Klicken Sie dazu mit der rechten Maustaste auf dasmyFusedLibrary
-Modul und wählen Sie „Neu“ > „Datei“ aus. - Fügen Sie Folgendes in die Datei
myFusedLibrary/build.gradle.kts
ein:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
Groovy
plugins { id 'fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
Abhängigkeiten hinzufügen
Die Hauptfunktion der verschmolzenen Bibliothek besteht darin, Abhängigkeiten zu bündeln. Das Plug-in unterstützt das Hinzufügen lokaler Projektabhängigkeiten und externer Bibliotheken.
Verwenden Sie die include
-Konfiguration, um Abhängigkeiten anzugeben, die gepackt werden sollen.
Transitive Abhängigkeiten werden nicht verpackt.
Beispiel:
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
Groovy
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
Zusammengeführte Bibliothek veröffentlichen
Sie sollten sich mit dem Veröffentlichen einer Android-Bibliothek vertraut machen, bevor Sie eine verschmolzene Bibliothek veröffentlichen. Das Veröffentlichen einer verschmolzenen Bibliothek ähnelt dem Veröffentlichen einer Android-Bibliothek. Es gibt jedoch einige wichtige Unterschiede, die Sie beachten müssen, um die verschmolzene Bibliothek richtig zu veröffentlichen:
- Das Maven-Veröffentlichungs-Plug-in muss auch auf alle Module angewendet werden, auf die das Fused Library-Plug-in angewendet wurde.
- Die Publikation muss von der
fusedLibraryComponent
erben, da diese die erforderlichen Abhängigkeiten zum Kompilieren des zusammengeführten Bibliotheks-Artefakts bereitstellt.
Hier ein Beispiel für eine Publikationskonfiguration:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
Ihre fusionierte Bibliothek zum Testen veröffentlichen
Sie sollten die Abhängigkeit von einer veröffentlichten verschmolzenen Bibliothek aus einer Android-App oder einer Android-Bibliothek testen. Wir empfehlen, die verschmolzene Bibliothek und ihre Projektabhängigkeiten in einem lokalen Maven-Repository zu veröffentlichen.
Wenn Sie die Artefakte der zusammengeführten Bibliothek in einem lokalen Repository veröffentlichen möchten, definieren Sie eine ähnliche Konfiguration wie die folgende:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
Zusammengeführte Bibliothek hochladen
Informationen zum Verteilen Ihrer zusammengeführten Mediathek finden Sie unter Mediathek hochladen.
Verhalten und Schutzmaßnahmen
Die Kombination von Android-Bibliotheken ist nicht ganz einfach und kann es für das Plug-in schwierig machen, Prioritäten zu setzen. Wenn beispielsweise zwei Bibliotheken mit derselben Klassenpfaddatei zusammengeführt werden, führt dies zu einem Build-Fehler. Bei der Zusammenführung von Ressourcen wird die Reihenfolge der Abhängigkeiten berücksichtigt, die bei der Auswahl einer Ressource mit demselben Namen in verschiedenen Bibliotheken angegeben wurde.
- Zusammengeführte Bibliotheken können nur als Android-Bibliotheksartefakt (AAR) veröffentlicht werden, um als Abhängigkeit hinzugefügt zu werden.
- Das Zusammenführen von Bibliotheken, die Datenbindung verwenden, wird nicht unterstützt.
- Sie können nicht mehrere Buildtypen und Produktvarianten in einer einzigen zusammengeführten Bibliothek zusammenführen. Erstellen Sie separate Fusionsbibliotheken für verschiedene Varianten.
Um den erforderlichen Konfigurationsaufwand und die Nutzerfreundlichkeit in Einklang zu bringen, führt das Plug-in bei mehrdeutigen Konflikten entweder einen Buildfehler aus oder verwendet Heuristiken beim Zusammenführen von Artefakten. In der folgenden Tabelle finden Sie Details dazu, wie Artefakte zusammengeführt werden:
Eingeben | Verhalten |
---|---|
Klassen | Bibliotheken mit demselben Klassenpfad führen beim Zusammenführen der Bibliothek zu einem Buildfehler. |
Android-Ressourcen | Beim Zusammenführen von Ressourcen wird die Reihenfolge der Abhängigkeiten berücksichtigt, die bei der Auswahl einer Ressource mit demselben Namen in verschiedenen Dateien angegeben wurde. |
AAR-Metadaten | AAR-Metadatenversionen werden zusammengeführt, indem der höchste Wert aus jeder Abhängigkeitsbibliothek priorisiert wird. Es gibt eine DSL, mit der diese Werte überschrieben werden können. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Java-Ressourcen | Java-Ressourcendateien in mehreren Bibliotheken mit identischen Pfaden sind nicht zulässig und führen zu einem Buildfehler. |
Bekannte Probleme
Die Fusionsbibliothek ist ein neues Plug-in. Es gibt bekannte Probleme, an deren Behebung wir arbeiten, um alle Anwendungsfälle zu erfüllen.
lint.jar
-Dateien sind nicht in der zusammengeführten AAR enthalten- Dateiabhängigkeiten von anderen .aar-Dateien hinzufügen
- Keine Unterstützung für die Zusammenführung von RenderScript- und Prefab-Artefakten
Abhängigkeiten einer verschmolzenen Bibliothek
Die verschmolzene Bibliothek hat keine Quellen und verwendet Android-Bibliotheken als einzige Quelle. Daher ist es wichtig zu wissen, woher die einzelnen Elemente stammen. Wenn Sie die Abhängigkeiten auflisten möchten, die in das resultierende Artefakt zusammengeführt werden, und die Abhängigkeiten, die zum Erstellen des Artefakts erforderlich sind, führen Sie die Aufgabe gradle :report
für die verschmolzene Bibliothek aus. Die Aufgaben generieren einen JSON-Bericht, der im Verzeichnis build/reports
der zusammengeführten Bibliothek gespeichert wird.
Weitere Informationen zu internen Plug-in-Abhängigkeiten erhalten Sie, wenn Sie die Aufgabe gradle :dependencies
ausführen, um den Status der Plug-in-Konfigurationen aufzurufen.