Android-Gradle-Plug-in 3.6.0 (Februar 2020)
Für diese Version des Android-Plug-ins ist Folgendes erforderlich:
-
Gradle 5.6.4. Weitere Informationen finden Sie im Abschnitt zum Aktualisieren von Gradle.
-
SDK Build Tools 28.0.3 oder höher.
Dieses kleine Update unterstützt die Kompatibilität mit neuen Standardeinstellungen und ‐features für die Paketsichtbarkeit in Android 11.
Weitere Informationen finden Sie in den Versionshinweisen zu 4.0.1.
Neue Funktionen
Diese Version des Android-Gradle-Plug-ins enthält die folgenden neuen Funktionen.
Bindung ansehen
Die Ansichtsbindung bietet Sicherheit bei der Kompilierung, wenn auf Ansichten in Ihrem Code verwiesen wird. Sie können jetzt findViewById()
durch die automatisch generierte Bindungsklassenreferenz ersetzen. Um mit der Ansichtsbindung zu beginnen, fügen Sie Folgendes in die Datei build.gradle
jedes Moduls ein:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Weitere Informationen finden Sie in der Dokumentation zur Bindung ansehen.
Unterstützung für das Maven Publish-Plug-in
Das Android-Gradle-Plug-in unterstützt das Maven Publish Gradle-Plug-in, mit dem Sie Build-Artefakte in einem Apache Maven-Repository veröffentlichen können. Das Android-Gradle-Plug-in erstellt eine Komponente für jedes Build-Variantenartefakt in Ihrer Anwendung oder Ihrem Bibliotheksmodul, mit der Sie eine Publikation für ein Maven-Repository anpassen können.
Weitere Informationen finden Sie auf der Seite zur Verwendung des Maven Publish-Plug-ins.
Neues standardmäßiges Tool für die Paketerstellung
Beim Erstellen der Debug-Version deiner App verwendet das Plug-in ein neues Paketerstellungstool namens zipflinger, um dein APK zu erstellen. Das neue Tool sollte die Build-Geschwindigkeit verbessern. Wenn das neue Tool zur Paketerstellung nicht wie erwartet funktioniert, melde bitte einen Fehler. Du kannst zum alten Tool zurückwechseln, indem du Folgendes in deine gradle.properties
-Datei einfügst:
android.useNewApkCreator=false
Attribution für native Builds
Sie können jetzt festlegen, wie lange Clang zum Erstellen und Verknüpfen der einzelnen C/C++-Dateien in Ihrem Projekt benötigt. Gradle kann ein Chrome-Trace ausgeben, das Zeitstempel für diese Compiler-Ereignisse enthält, damit Sie die für die Erstellung Ihres Projekts erforderliche Zeit besser nachvollziehen können. So geben Sie diese Build-Attributionsdatei aus:
-
Fügen Sie das Flag
-Pandroid.enableProfileJson=true
hinzu, wenn Sie einen Gradle-Build ausführen. Beispiel:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Öffne den Chrome-Browser und gib
chrome://tracing
in die Suchleiste ein. -
Klicken Sie auf die Schaltfläche Laden und wechseln Sie zu
<var>project-root</var>/build/android-profile
, um die Datei zu finden. Die Datei heißtprofile-<var>timestamp</var>.json.gz
.
Die Attributionsdaten des nativen Builds werden oben im Viewer angezeigt:
Verhaltensänderungen
Bei Verwendung dieser Plug-in-Version können folgende Verhaltensänderungen auftreten.
Native Bibliotheken, die standardmäßig unkomprimiert sind
Wenn Sie Ihre Anwendung erstellen, legt das Plug-in extractNativeLibs
jetzt standardmäßig auf "false"
fest. Das heißt, Ihre nativen Bibliotheken sind auf Seiten ausgerichtet und werden unkomprimiert gepackt. Dadurch wird zwar die Uploadgröße erhöht, aber Ihre Nutzer profitieren von folgenden Vorteilen:
- Die App-Installationsgröße ist geringer, da die Plattform direkt über das installierte APK auf die nativen Bibliotheken zugreifen kann, ohne eine Kopie der Bibliotheken erstellen zu müssen.
- Kleinere Downloadgröße, da die Play Store-Komprimierung in der Regel besser ist, wenn du unkomprimierte native Bibliotheken in dein APK oder Android App Bundle aufnimmst.
Wenn das Android-Gradle-Plug-in stattdessen komprimierte native Bibliotheken verpacken soll, füge Folgendes in das Manifest deiner App ein:
<application
android:extractNativeLibs="true"
... >
</application>
Hinweis: Das Manifestattribut extractNativeLibs
wurde durch die DSL-Option useLegacyPackaging
ersetzt. Weitere Informationen finden Sie im Release-Hinweis Mit DSL komprimierte native Bibliotheken verpacken.
Standard-NDK-Version
Wenn Sie mehrere Versionen des NDK herunterladen, wählt das Android-Gradle-Plug-in jetzt eine Standardversion für die Kompilierung Ihrer Quellcodedateien aus.
Bisher wählte das Plug-in die neueste heruntergeladene Version des NDK aus.
Verwenden Sie das Attribut android.ndkVersion
in der Datei build.gradle
des Moduls, um den vom Plug-in ausgewählten Standardwert zu überschreiben.
Vereinfachte Generierung von R-Klassen
Das Android-Gradle-Plug-in vereinfacht den Kompilierungsklassenpfad. Es generiert nur eine R-Klasse für jedes Bibliotheksmodul in Ihrem Projekt und teilt diese R-Klassen mit anderen Modulabhängigkeiten. Diese Optimierung sollte zu schnelleren Builds führen, aber Sie sollten Folgendes beachten:
- Da der Compiler R-Klassen mit vorgelagerten Modulabhängigkeiten teilt, ist es wichtig, dass jedes Modul in Ihrem Projekt einen eindeutigen Paketnamen verwendet.
- Die Sichtbarkeit der R-Klasse einer Bibliothek für andere Projektabhängigkeiten wird durch die Konfiguration bestimmt, die verwendet wird, um die Bibliothek als Abhängigkeit aufzunehmen. Wenn Bibliothek A beispielsweise Bibliothek B als API-Abhängigkeit enthält, haben Bibliothek A und andere von Bibliothek A abhängige Bibliotheken Zugriff auf die R-Klasse von Bibliothek B. Andere Bibliotheken haben jedoch möglicherweise keinen Zugriff auf die R-Klasse von Bibliothek B. Wenn Bibliothek A die Abhängigkeitskonfiguration
implementation
verwendet. Weitere Informationen finden Sie unter Abhängigkeitskonfigurationen.
Fehlende Ressourcen aus der Standardkonfiguration entfernen
Wenn Sie für Bibliotheksmodule eine Ressource für eine Sprache angeben, die Sie nicht in den Standardressourcensatz aufnehmen, z. B. hello_world
als Stringressource in /values-es/strings.xml
, diese Ressource aber nicht in /values/strings.xml
definieren, enthält das Android-Gradle-Plug-in diese Ressource beim Kompilieren Ihres Projekts nicht mehr. Diese Verhaltensänderung sollte zu weniger Resource Not Found
-Laufzeitausnahmen und einer verbesserten Build-Geschwindigkeit führen.
D8 berücksichtigt jetzt die CLASS-Aufbewahrungsrichtlinie für Annotationen
Beim Kompilieren Ihrer App berücksichtigt D8 jetzt, wenn Anmerkungen eine CLASS-Aufbewahrungsrichtlinie anwenden. Diese Anmerkungen sind dann zur Laufzeit nicht mehr verfügbar. Dieses Verhalten besteht auch, wenn das Ziel-SDK der App auf API-Level 23 festgelegt wird, das zuvor den Zugriff auf diese Annotationen während der Laufzeit ermöglichte, wenn deine App mit älteren Versionen des Android-Gradle-Plug-ins und D8 kompiliert wurde.
Sonstige Verhaltensänderungen
-
Bei
aaptOptions.noCompress
wird die Groß- und Kleinschreibung nicht mehr auf allen Plattformen (sowohl für APKs als auch für Bundles) berücksichtigt. Pfade, die Großbuchstaben enthalten, werden berücksichtigt. -
Die Datenbindung ist jetzt standardmäßig inkrementell. Weitere Informationen finden Sie unter Problem #110061530.
-
Alle Einheitentests, einschließlich Roboelectric-Einheitentests, können jetzt vollständig im Cache gespeichert werden. Weitere Informationen finden Sie unter Problem #115873047.
Fehlerkorrekturen
Diese Version des Android-Gradle-Plug-ins enthält die folgenden Fehlerkorrekturen:
- Robolectric-Einheitentests werden jetzt in Bibliotheksmodulen unterstützt, die Datenbindung verwenden. Weitere Informationen finden Sie unter Problem #126775542.
- Sie können jetzt
connectedAndroidTest
-Aufgaben über mehrere Module hinweg ausführen, wobei der parallele Ausführungsmodus von Gradle aktiviert ist.
Bekannte Probleme
In diesem Abschnitt werden bekannte Probleme im Android-Gradle-Plug-in 3.6.0 beschrieben.
Langsame Leistung der Android Lint-Aufgabe
Die Ausführung von Android Lint kann bei einigen Projekten aufgrund einer Regression in der Parsing-Infrastruktur viel länger dauern, was zu einer langsameren Berechnung der abgeleiteten Typen für Lambdas in bestimmten Codekonstruktionen führt.
Das Problem wird als Fehler in IDEA gemeldet und im Android-Gradle-Plug-in 4.0 behoben.
Manifestklasse {:#agp-missing-manifest} fehlt
Wenn im Manifest Ihrer App benutzerdefinierte Berechtigungen definiert sind, generiert das Android-Gradle-Plug-in in der Regel eine Manifest.java
-Klasse, die Ihre benutzerdefinierten Berechtigungen als Stringkonstanten enthält. Das Plug-in bündelt diese Klasse mit Ihrer Anwendung, sodass Sie diese Berechtigungen zur Laufzeit einfacher referenzieren können.
Das Generieren der Manifestklasse funktioniert im Android-Gradle-Plug-in 3.6.0 nicht.
Wenn Sie Ihre Anwendung mit dieser Version des Plug-ins erstellen und diese auf die Manifestklasse verweist, wird möglicherweise die Ausnahme ClassNotFoundException
angezeigt. Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:
-
Verweisen Sie auf Ihre benutzerdefinierten Berechtigungen mit dem voll qualifizierten Namen. Beispiel:
"com.example.myapp.permission.DEADLY_ACTIVITY"
. -
Definieren Sie Ihre eigenen Konstanten, wie unten gezeigt:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }