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.
<ph type="x-smartling-placeholder"></ph> Dieses kleine Update unterstützt die Kompatibilität mit neuen Standardeinstellungen und Funktionen für Paketsichtbarkeit für 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 View-Bindung bietet Sicherheit bei der Kompilierungszeit beim Verweisen auf Ansichten in
Ihren Code. Sie können jetzt findViewById()
durch die
automatisch generierte Bindungsklassenreferenz. Um mit der Ansichtsbindung zu beginnen,
Füge Folgendes in die Datei build.gradle
jedes Moduls ein:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
Weitere Informationen finden Sie in der Ansicht Bindungsdokumentation.
Unterstützung für das Maven Publish-Plug-in
Das Android-Gradle-Plug-in unterstützt die Maven Gradle-Plug-in veröffentlichen, mit dem Sie Build-Artefakte auf ein Apache Maven-Repository. Das Android-Gradle-Plug-in erstellt ein Komponente für jedes Build-Variantenartefakt in Ihrer App oder Ihrem Bibliotheksmodul, zum Anpassen eines Publikation in ein Maven-Repository.
Weitere Informationen finden Sie auf der Seite Maven Publish verwenden Plug-in hinzu.
Neues standardmäßiges Tool für die Paketerstellung
Beim Erstellen der Debug-Version Ihrer Anwendung verwendet das Plug-in eine neue
Tool namens zipflinger, mit dem Sie Ihre APK-Datei erstellen können. Diese neue
sollte die Build-Geschwindigkeit verbessern. Wenn das neue Verpackungstool
nicht wie erwartet funktioniert,
melden Sie den Fehler. Sie können wiederherstellen zu:
Verpackungstool verwenden, indem Sie Folgendes in Ihre
gradle.properties
-Datei:
android.useNewApkCreator=false
Attribution für native Builds
Sie können jetzt die Zeit bestimmen, die Clang für die Erstellung und und verknüpfen Sie jede C/C++-Datei in Ihrem Projekt. Gradle kann ein Chrome-Trace ausgeben die Zeitstempel für diese Compiler-Ereignisse enthält. wie viel Zeit für die Erstellung Ihres Projekts benötigt wird. So geben Sie diesen Build aus Attributionsdatei verwenden, gehen Sie so vor:
-
Fügen Sie das Flag
-Pandroid.enableProfileJson=true
hinzu, wenn einen Gradle-Build ausführen. Beispiel:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Öffnen Sie den Chrome-Browser und geben Sie
chrome://tracing
ein in in die Suchleiste ein. -
Klicken Sie auf die Schaltfläche Load (Laden) und navigieren Sie zu
<var>project-root</var>/build/android-profile
um die Datei zu finden. Der Dateinameprofile-<var>timestamp</var>.json.gz
Die Attributionsdaten für native Builds sehen Sie oben in der Zuschauer:
Verhaltensänderungen
Bei Verwendung dieser Plug-in-Version können folgende Probleme auftreten: Verhaltensänderungen zu erkennen.
Unkomprimierte native Bibliotheken, die von Standard
Beim Erstellen Ihrer Anwendung legt das Plug-in
extractNativeLibs
bis "false"
von
Standardeinstellung. Das heißt, Ihre nativen Bibliotheken
sind auf Seiten ausgerichtet und werden gepackt,
unkomprimiert. Das führt zwar zu einer größeren Uploadgröße,
profitieren von Folgendem:
- Die App-Installationsgröße ist geringer, da die Plattform auf die native App zugreifen kann. direkt aus dem installierten APK, ohne dass Sie eine Kopie der die Bibliotheken.
- Kleinere Downloadgröße, da normalerweise die Play Store-Komprimierung wenn Sie unkomprimierte native Bibliotheken in Ihr APK oder Android App Bundle
Soll das Android-Gradle-Plug-in stattdessen komprimiert sein native Bibliotheken verwenden, fügen Sie Folgendes in das Manifest Ihrer App ein:
<application
android:extractNativeLibs="true"
... >
</application>
Hinweis: Das Manifest extractNativeLibs
Attribut wurde durch useLegacyPackaging
DSL ersetzt
Option. Weitere Informationen finden Sie im Release-Hinweis.
Komprimierte Pakete über DSL verpacken
native Bibliotheken.
Standard-NDK-Version
Wenn Sie mehrere Versionen des NDK herunterladen, kann das Android-Gradle-Plug-in
wählt jetzt eine Standardversion zum Kompilieren Ihrer Quellcodedateien aus.
Bisher wählte das Plug-in die neueste heruntergeladene Version des NDK aus.
Verwenden Sie das Attribut android.ndkVersion
im Modul
build.gradle
-Datei, um den vom Plug-in ausgewählten Standardwert zu überschreiben.
Vereinfachte Generierung von R-Klassen
Das Android-Gradle-Plug-in vereinfacht den Kompilierungsklassenpfad, indem Generieren Sie nur eine R-Klasse für jedes Bibliotheksmodul in Ihrem Projekt bei der gemeinsamen Nutzung dieser R-Klassen mit anderen Modulabhängigkeiten. Diese Optimierung führt zu schnelleren Builds. im Hinterkopf:
- Weil der Compiler R-Klassen mit dem vorgelagerten Modul teilt müssen Sie für jedes Modul Ihres Projekts eindeutigen Paketnamen.
- 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. Wenn Bibliothek A z. B. Bibliothek B als "api" enthält,
Bibliothek A und andere von Bibliothek A abhängige Bibliotheken
Zugriff auf die R-Klasse von
Bibliothek B. Andere Bibliotheken haben jedoch möglicherweise
Zugriff auf die R-Klasse von
Bibliothek B. Wenn Bibliothek A den Parameter
Konfiguration der
implementation
-Abhängigkeit. Weitere Informationen Mehr erfahren Sie mehr über Abhängigkeit Konfigurationen
Fehlende Ressourcen aus Standard entfernen Konfiguration
Wenn Sie für Bibliotheksmodule eine Ressource für eine Sprache hinzufügen,
nicht zum Standardsatz von Ressourcen gehören, z. B. wenn Sie
hello_world
als String-Ressource in
/values-es/strings.xml
, aber Sie definieren diese Ressource nicht in
/values/strings.xml
: Das Android-Gradle-Plug-in wurde eingestellt.
diese Ressource beim Kompilieren des Projekts enthält. Diese Verhaltensänderung
sollte zu weniger Resource Not Found
Laufzeitausnahmen führen
und eine schnellere Build-Erstellung.
D8 berücksichtigt jetzt die CLASS-Aufbewahrungsrichtlinie für Anmerkungen
Beim Kompilieren Ihrer App berücksichtigt D8 jetzt, wenn Anmerkungen eine CLASS-Klasse anwenden. und diese Anmerkungen nicht mehr unter Laufzeit. Dies ist auch der Fall, wenn das Ziel-SDK der App auf API-Level 23, das zuvor den Zugriff auf diese Annotationen während Laufzeit, wenn du deine App mit älteren Versionen des Android-Gradle-Plug-ins kompilierst und D8.
Sonstige Verhaltensänderungen
-
Bei
aaptOptions.noCompress
wird nicht mehr zwischen Groß- und Kleinschreibung unterschieden. Plattformen (sowohl für APKs als auch für Bundles) und berücksichtigt Pfade, die Großbuchstaben. -
Die Datenbindung ist jetzt standardmäßig inkrementell. Weitere Informationen finden Sie unter issue #110061530.
-
Alle Einheitentests, einschließlich Roboelectric-Einheitentests, sind jetzt vollständig Cache-fähig sind. Weitere Informationen finden Sie unter issue #115873047.
Fehlerkorrekturen
Diese Version des Android-Gradle-Plug-ins enthält den folgenden Fehler Fehlerbehebungen:
- Robolectric-Einheitentests werden jetzt in Bibliotheksmodulen unterstützt, die Datenbindung. Weitere Informationen finden Sie unter issue #126775542.
- Sie können jetzt
connectedAndroidTest
Aufgaben auf mehreren Geräten ausführen: Module, während die Gradle-Funktion parallel Ausführungsmodus aktiviert ist.
Bekannte Probleme
In diesem Abschnitt werden bekannte Probleme im Android-Gradle-Plug-in beschrieben. 3.6.0
Langsame Leistung der Android Lint-Aufgabe
Die Ausführung von Android Lint kann bei einigen Projekten aufgrund Regression in seiner Parsing-Infrastruktur ab, was zu einer langsameren Berechnung für Lambdas in bestimmten Codekonstrukten.
Das Problem wird gemeldet als ein Programmfehler in IDEA und wird im Android-Gradle-Plug-in 4.0 behoben.
Manifestklasse {:#agp-missing-manifest} fehlt
Wenn deine App benutzerdefinierte Berechtigungen in ihrem Manifest definiert, wird die Android-App
Das Gradle-Plug-in generiert in der Regel eine Manifest.java
-Klasse, die
enthält Ihre benutzerdefinierten Berechtigungen als Stringkonstanten. Die Plug-in-Pakete
mit Ihrer App kombinieren, damit Sie diese einfacher
Berechtigungen während der Laufzeit.
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 sie auf
Manifestklasse haben, wird möglicherweise ein ClassNotFoundException
Ausnahme. 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"; } }