Android Gradle-Plug-in 3.4.0 (April 2019)
Für diese Version des Android-Plug-ins ist Folgendes erforderlich:
-
Gradle 5.1.1 oder höher Weitere Informationen finden Sie im Abschnitt zum Aktualisieren von Gradle.
Hinweis: Ab Gradle 5.0 wird die Standardgröße des Gradle-Daemon-Arbeitsspeichers von 1 GB auf 512 MB verringert. Dies kann zu einem Leistungsabfall der Builds führen. Wenn Sie diese Standardeinstellung überschreiben möchten, geben Sie die Größe des Gradle-Daemon-Heaps in der
gradle.properties
-Datei Ihres Projekts an. -
SDK Build Tools 28.0.3 oder höher.
Dieses kleinere Update unterstützt die Kompatibilität mit neuen Standardeinstellungen und -funktionen für die Paketsichtbarkeit in Android 11.
Weitere Informationen finden Sie in den Versionshinweisen zu 4.0.1.
3.4.2 (Juli 2019)
Dieses kleine Update unterstützt Android Studio 3.4.2 und enthält verschiedene Fehlerkorrekturen und Leistungsverbesserungen. Eine Liste wichtiger Fehlerkorrekturen finden Sie im zugehörigen Beitrag im Blog „Release Updates“.
3.4.1 (Mai 2019)
Dieses kleine Update unterstützt Android Studio 3.4.1 und enthält verschiedene Fehlerkorrekturen und Leistungsverbesserungen. Eine Liste wichtiger Fehlerkorrekturen finden Sie im zugehörigen Beitrag im Blog „Release Updates“.
Neue Funktionen
-
Neue Abhängigkeitskonfigurationen für Lint-Prüfungen: Das Verhalten von
lintChecks
hat sich geändert und die neue AbhängigkeitskonfigurationlintPublish
wurde eingeführt, um Ihnen mehr Kontrolle darüber zu geben, welche Lint-Prüfungen in Ihre Android-Bibliotheken verpackt werden.-
lintChecks
: Dies ist eine vorhandene Konfiguration, die Sie für Lint-Prüfungen verwenden sollten, die nur ausgeführt werden sollen, wenn Ihr Projekt lokal erstellt wird. Wenn Sie zuvor die AbhängigkeitskonfigurationlintChecks
verwendet haben, um Lint-Prüfungen in das veröffentlichte AAE aufzunehmen, müssen Sie diese Abhängigkeiten migrieren, um stattdessen die neuelintPublish
-Konfiguration zu verwenden, die unten beschrieben wird. -
lintPublish
: Verwenden Sie diese neue Konfiguration in Bibliotheksprojekten für Lint-Prüfungen, die Sie in das veröffentlichte AAE aufnehmen möchten (siehe unten). Das bedeutet, dass Projekte, die Ihre Bibliothek nutzen, diese Lint-Prüfungen ebenfalls anwenden.
Im folgenden Codebeispiel werden beide Abhängigkeitskonfigurationen in einem lokalen Android-Bibliotheksprojekt verwendet.
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
-
Im Allgemeinen sollten sich beim Erstellen und Signieren von Paketen und Signaturen insgesamt Verbesserungen bei der Build-Geschwindigkeit ergeben. Wenn Sie im Zusammenhang mit diesen Aufgaben einen Leistungsabfall feststellen, melden Sie den Fehler.
-
Änderungen des Verhaltens
-
Warnung zur Einstellung des Feature-Plug-ins für Android Instant Apps:Wenn Sie noch immer das
com.android.feature
-Plug-in zum Erstellen Ihrer Instant App verwenden, wird vom Android Gradle-Plug-in 3.4.0 eine Einstellungswarnung ausgegeben. Damit du deine Instant App auch in zukünftigen Versionen des Plug-ins erstellen kannst, solltest du deine Instant App zum Plug-in für dynamische Funktionen migrieren. Dadurch kannst du sowohl deine installierte App als auch deine Instant App über ein einziges Android App Bundle veröffentlichen. -
Standardmäßig aktiviert:R8 integriert Entsugarieren, Verkleinern, Verschleieren, Optimieren und Dexieren in einem Schritt, was zu deutlichen Verbesserungen der Build-Leistung führt. R8 wurde im Android-Gradle-Plug-in 3.3.0 eingeführt und ist jetzt standardmäßig für App- und Android-Bibliotheksprojekte mit Plug-in 3.4.0 und höher aktiviert.
Die folgende Abbildung bietet einen allgemeinen Überblick über den Kompilierungsprozess vor der Einführung von R8.
Mit R8 werden nun Entsugaren, Schrumpfen, Verschleieren, Optimieren und Dexing (D8) in einem Schritt abgeschlossen, wie unten dargestellt.
Beachten Sie, dass R8 so konzipiert ist, dass es mit Ihren vorhandenen ProGuard-Regeln funktioniert. Sie müssen also wahrscheinlich keine Maßnahmen ergreifen, um von R8 zu profitieren. Da es sich um eine andere Technologie als ProGuard handelt, die speziell für Android-Projekte entwickelt wurde, kann eine Verkleinerung und Optimierung dazu führen, dass Code entfernt wird, den ProGuard möglicherweise nicht hat. In diesem unwahrscheinlichen Fall müssen Sie also möglicherweise zusätzliche Regeln hinzufügen, um diesen Code in der Build-Ausgabe beizubehalten.
Wenn bei der Verwendung von R8 Probleme auftreten, lesen Sie die FAQ zur R8-Kompatibilität, um zu prüfen, ob es eine Lösung für Ihr Problem gibt. Wenn keine Lösung dokumentiert ist, melden Sie einen Fehler.
Sie können R8 deaktivieren, indem Sie der Datei gradle.properties
Ihres Projekts eine der folgenden Zeilen hinzufügen:
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
Hinweis:Wenn Sie für einen bestimmten Build-Typ useProguard
auf false
in der Datei build.gradle
Ihres App-Moduls festlegen, verwendet das Android-Gradle-Plug-in R8, um den Code Ihrer App für diesen Build-Typ zu verkleinern, unabhängig davon, ob Sie R8 in der gradle.properties
-Datei Ihres Projekts deaktivieren.
-
ndkCompile
wurde verworfen: Wenn Sie versuchen, Ihre nativen Bibliotheken mitndkBuild
zu kompilieren, tritt jetzt ein Build-Fehler auf. Sie sollten stattdessen entweder CMake oder ndk-build verwenden, um Ihrem Projekt C- und C++-Code hinzuzufügen.
Bekannte Probleme
-
Die korrekte Verwendung eindeutiger Paketnamen wird derzeit nicht erzwungen, wird in späteren Versionen des Plug-ins jedoch strenger. Unter Android 3.4.0 des Gradle-Plug-ins für Android können Sie prüfen, ob Ihr Projekt zulässige Paketnamen deklariert. Fügen Sie dazu die folgende Zeile in die Datei
gradle.properties
ein.android.uniquePackageNames = true
Weitere Informationen zum Festlegen eines Paketnamens über das Android-Gradle-Plug-in finden Sie unter App-ID festlegen.