Android-Gradle-Plug-in 7.0.0 (Juli 2021)

Das Android-Gradle-Plug-in 7.0.0 ist ein wichtiger Release, der eine Vielzahl neuer Funktionen und Verbesserungen enthält.

7.0.1 (August 2021)

Dieses kleinere Update enthält verschiedene Fehlerkorrekturen. Eine Liste der wichtigsten Fehlerkorrekturen finden Sie im zugehörigen Beitrag im Blog „Release Updates“.

Kompatibilität

Mindestversion Standardversion Hinweise
Gradle 7.0.2 7.0.2 Weitere Informationen finden Sie unter Gradle aktualisieren.
SDK-Build-Tools 30.0.2 30.0.2 Installieren oder konfigurieren Sie die SDK-Build-Tools.
NDK 21.4.7075529 Installieren Sie oder konfigurieren Sie eine andere Version des NDK.
JDK 11 11 Weitere Informationen finden Sie unter JDK-Version festlegen.

Für die Ausführung von AGP 7.0 ist JDK 11 erforderlich

Wenn Sie das Android-Gradle-Plug-in 7.0 zum Erstellen Ihrer App verwenden, ist JDK 11 jetzt für die Ausführung von Gradle erforderlich. Android Studio Arctic Fox enthält JDK 11 und konfiguriert Gradle so, dass es standardmäßig verwendet wird. Die meisten Android Studio Nutzer müssen daher keine Konfigurationsänderungen an ihren Projekten vornehmen.

Wenn Sie die von AGP in Android Studio verwendete JDK-Version manuell festlegen müssen, müssen Sie JDK 11 oder höher verwenden.

Wenn Sie AGP unabhängig von Android Studio verwenden, aktualisieren Sie die JDK-Version, indem Sie die Umgebungsvariable JAVA_HOME oder die -Dorg.gradle.java.home Befehlszeilenoption auf das Installationsverzeichnis von JDK 11 festlegen.

Der SDK-Manager und der AVD-Manager im veralteten SDK-Tools-Paket funktionieren nicht mit JDK 11. Wenn Sie den SDK-Manager und den AVD-Manager weiterhin mit AGP 7.0 und höher verwenden möchten, müssen Sie zu den neuen Versionen der Tools im aktuellen Android SDK Command-Line Tools Paket wechseln.

Varianten-API stabil

Die neue Varianten-API ist jetzt stabil. Informationen zu den neuen Schnittstellen finden Sie im com.android.build.api.variant Paket und Beispiele im gradle-recipes GitHub-Projekt. Im Rahmen der neuen Varianten-API haben wir über die Artifacts Schnittstelle eine Reihe von Zwischendateien (sogenannte Artefakte) zur Verfügung gestellt. Diese Artefakte, z. B. das zusammengeführte Manifest, können sicher mit Drittanbieter-Plug-ins und -Code abgerufen und angepasst werden.

Wir werden die Varianten-API weiter ausbauen, indem wir neue Funktionen hinzufügen und die Anzahl der Zwischenartefakte erhöhen, die wir zur Anpassung zur Verfügung stellen.

Verhaltensänderungen für Lint

In diesem Abschnitt werden mehrere Verhaltensänderungen für Lint im Android-Gradle Plug-in 7.0.0 beschrieben.

Verbessertes Lint für Bibliotheksabhängigkeiten

Die Ausführung von Lint mit checkDependencies = true ist jetzt schneller als zuvor. Für Android-Projekte, die aus einer App mit Bibliotheks abhängigkeiten bestehen, empfiehlt es sich, checkDependencies auf true wie unten gezeigt zu setzen und Lint über ./gradlew :app:lint auszuführen. Dadurch werden alle Abhängigkeits module parallel analysiert und ein einzelner Bericht mit Problemen aus der App und allen ihren Abhängigkeiten erstellt.

Groovy

// build.gradle
android {
  ...
  lintOptions {
    checkDependencies true
  }
}

Kotlin

// build.gradle.kts
android {
  ...
  lint {
    isCheckDependencies = true
  }
}

Lint-Aufgaben können jetzt „UP-TO-DATE“ sein

Wenn sich die Quellen und Ressourcen eines Moduls nicht geändert haben, muss die Lint-Analyse Aufgabe für das Modul nicht noch einmal ausgeführt werden. In diesem Fall wird die Ausführung der Aufgabe in der Gradle-Ausgabe als „UP-TO-DATE“ angezeigt. Wenn Sie Lint mit dieser Änderung für ein Anwendungsmodul mit checkDependencies = true ausführen, müssen nur Module, die sich geändert haben, ihre Analyse ausführen. Dadurch kann Lint noch schneller ausgeführt werden.

Die Lint-Berichtsaufgabe muss auch nicht ausgeführt werden, wenn sich die Eingaben nicht geändert haben. Ein damit zusammenhängendes bekanntes Problem ist, dass keine Lint Textausgabe an stdout ausgegeben wird, wenn die Lint-Aufgabe „UP-TO-DATE“ ist (Problem 191897708).

Lint für dynamische Funktionsmodule ausführen

AGP unterstützt die Ausführung von Lint aus dynamischen Funktionsmodulen nicht mehr. Wenn Sie Lint aus dem entsprechenden Anwendungsmodul ausführen, wird Lint für die dynamischen Funktionsmodule ausgeführt und alle Probleme werden in den Lint-Bericht der App aufgenommen. Ein damit zusammenhängendes bekanntes Problem ist, dass beim Ausführen von Lint mit checkDependencies = true aus einem App-Modul die Abhängigkeiten von Bibliotheken für dynamische Funktionen nur dann geprüft werden, wenn sie auch App Abhängigkeiten sind (Problem 191977888).

Lint nur für die Standardvariante ausführen

Wenn Sie ./gradlew :app:lint ausführen, wird Lint jetzt nur für die Standardvariante ausgeführt. In früheren Versionen von AGP wurde Lint für alle Varianten ausgeführt.

Warnungen zu fehlenden Klassen im R8-Shrinker

R8 verarbeitet fehlende Klassen und die Option -dontwarn genauer und konsistenter. Daher sollten Sie die von R8 ausgegebenen Warnungen zu fehlenden Klassen auswerten.

Wenn R8 auf eine Klassenreferenz stößt, die nicht in Ihrer App oder einer ihrer Abhängigkeiten definiert ist, wird eine Warnung ausgegeben, die in der Build Ausgabe angezeigt wird. Beispiel:

R8: Missing class: java.lang.instrument.ClassFileTransformer

Diese Warnung bedeutet, dass die Klassendefinition java.lang.instrument.ClassFileTransformer nicht gefunden wurde bei der Analyse des App-Codes. Das bedeutet in der Regel, dass ein Fehler vorliegt. Es ist jedoch möglich, dass Sie diese Warnung ignorieren möchten. Zwei häufige Gründe die Warnung zu ignorieren:

  1. Bibliotheken, die auf die JVM ausgerichtet sind, und die fehlende Klasse sind vom JVM Bibliothekstyp (wie im obigen Beispiel).

  2. Eine Ihrer Abhängigkeiten verwendet eine API, die nur zur Kompilierzeit verwendet wird.

Sie können eine Warnung zu einer fehlenden Klasse ignorieren, indem Sie der Datei proguard-rules.pro eine -dontwarn -Regel hinzufügen. Beispiel:

-dontwarn java.lang.instrument.ClassFileTransformer

Zur Vereinfachung generiert AGP eine Datei, die alle potenziell fehlenden Regeln enthält, und schreibt sie in einen Dateipfad wie den folgenden: app/build/outputs/mapping/release/missing_rules.txt. Fügen Sie die Regeln der proguard-rules.pro Datei hinzu, um Warnungen zu ignorieren.

In AGP 7.0 werden Nachrichten zu fehlenden Klassen als Warnungen angezeigt. Sie können sie in Fehler umwandeln, indem Sie android.r8.failOnMissingClasses = true in gradle.properties festlegen. In AGP 8.0 werden diese Warnungen zu Fehlern, die den Build unterbrechen. Sie können das Verhalten von AGP 7.0 beibehalten, indem Sie der Datei proguard-rules.pro die Option -ignorewarnings hinzufügen. Das wird jedoch nicht empfohlen.

Android-Gradle-Plug-in-Build-Cache entfernt

Der AGP-Build-Cache wurde in AGP 4.1 entfernt. Der AGP-Build-Cache wurde in AGP 2.3 als Ergänzung zum Gradle-Build-Cache eingeführt und in AGP 4.1 vollständig durch den Gradle-Build-Cache ersetzt. Diese Änderung hat keine Auswirkungen auf die Build-Dauer.

In AGP 7.0 wurden die android.enableBuildCache Property, die android.buildCacheDir Property und die cleanBuildCache Aufgabe entfernt.

Java 11-Quellcode im Projekt verwenden

Sie können jetzt bis zu Java 11-Quellcode im Projekt Ihrer App kompilieren und so neuere Sprachfunktionen wie private Schnittstellenmethoden, den Diamond -Operator für anonyme Klassen und die Syntax für lokale Variablen für Lambda-Parameter verwenden.

Wenn Sie diese Funktion aktivieren möchten, legen Sie compileOptions auf die gewünschte Java-Version und legen Sie compileSdkVersion auf 30 oder höher fest:

// build.gradle
android {
  compileSdkVersion 30
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "11"
  }
}
// build.gradle.kts
android {
  compileSdkVersion(30)
  compileOptions {
    sourceCompatibility(JavaVersion.VERSION_11)
    targetCompatibility(JavaVersion.VERSION_11)
  }
  kotlinOptions {
    jvmTarget = "11"
  }
}

Abhängigkeitskonfigurationen entfernt

In AGP 7.0 wurden die folgenden Konfigurationen (oder Abhängigkeitsbereiche) entfernt:

  • compile
    Je nach Anwendungsfall wurde diese durch api oder implementation ersetzt.
    Gilt auch für *Compile-Varianten, z. B. debugCompile.
  • provided
    Diese wurde durch compileOnly ersetzt.
    Gilt auch für *Provided-Varianten, z. B.: releaseProvided.
  • apk
    Dies wurde durch runtimeOnly ersetzt.
  • publish
    Diese wurde durch runtimeOnly ersetzt.

In den meisten Fällen migriert der AGP Upgrade Assistant Ihr Projekt automatisch zu den neuen Konfigurationen.

Änderung des Klassenpfads beim Kompilieren mit dem Android-Gradle-Plug-in

Wenn Sie mit dem Android-Gradle-Plug-in kompilieren, kann sich der Kompilier klassenpfad ändern. Da AGP jetzt intern api/implementation Konfigurationen verwendet, werden einige Artefakte möglicherweise aus dem Kompilier Klassenpfad entfernt. Wenn Sie zur Kompilierzeit von einer AGP-Abhängigkeit abhängig sind, müssen Sie sie als explizite Abhängigkeit hinzufügen.

Das Hinzufügen nativer Bibliotheken in einem Java-Ressourcenordner wird nicht unterstützt

Bisher konnten Sie eine native Bibliothek in einem Java-Ressourcenordner hinzufügen und den Ordner mit android.sourceSets.main.resources.srcDirs registrieren, damit die native Bibliothek extrahiert und dem endgültigen APK hinzugefügt wird. Ab AGP 7.0 wird dies nicht mehr unterstützt und native Bibliotheken in einem Java-Ressourcenordner werden ignoriert. Verwenden Sie stattdessen die DSL-Methode für native Bibliotheken: android.sourceSets.main.jniLibs.srcDirs. Weitere Informationen finden Sie unter Quellsätze konfigurieren.

Bekannte Probleme

In diesem Abschnitt werden bekannte Probleme im Android-Gradle-Plug-in 7.0.0 beschrieben.

Inkompatibilität mit dem Kotlin Multiplatform-Plug-in 1.4.x

Das Android-Gradle-Plug-in 7.0.0 ist mit Kotlin Multiplatform-Plug-in 1.5.0 und höher kompatibel. Projekte, die die Kotlin Multiplatform-Unterstützung verwenden, müssen auf Kotlin 1.5.0 aktualisiert werden, um das Android-Gradle Plug-in 7.0.0 verwenden zu können. Als Behelfslösung können Sie das Android-Gradle-Plug-in auf 4.2.x downgraden. Das wird jedoch nicht empfohlen.

Weitere Informationen finden Sie unter KT-43944.

Fehlende Lint-Ausgabe

Wenn die Lint-Aufgabe auf dem neuesten Stand ist, wird keine Lint-Textausgabe an stdout ausgegeben (Problem 191897708). Weitere Informationen finden Sie unter Verhaltensänderungen für Lint. Dieses Problem wird im Android-Gradle-Plug-in 7.1 behoben.

Nicht alle Bibliotheksabhängigkeiten für dynamische Funktionen werden mit Lint geprüft

Wenn Sie Lint mit checkDependencies = true aus einem App-Modul ausführen, werden die Abhängigkeiten von Bibliotheken für dynamische Funktionen nur dann geprüft, wenn sie auch App-Abhängigkeiten sind (Problem 191977888). Als Behelfslösung kann die Lint-Aufgabe für diese Bibliotheken ausgeführt werden. Weitere Informationen finden Sie unter Verhaltensänderungen für Lint.