Android Gradle-Plug-in 3.4.0 (April 2019)

Für diese Version des Android-Plug-ins ist Folgendes erforderlich:

3.4.3 (Juli 2020)

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ängigkeitskonfiguration lintPublish 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ängigkeitskonfiguration lintChecks verwendet haben, um Lint-Prüfungen in das veröffentlichte AAE aufzunehmen, müssen Sie diese Abhängigkeiten migrieren, um stattdessen die neue lintPublish-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.

Vor R8 war ProGuard ein anderer Schritt zur Kompilierung als Dexing und Entzugaren.

Mit R8 werden nun Entsugaren, Schrumpfen, Verschleieren, Optimieren und Dexing (D8) in einem Schritt abgeschlossen, wie unten dargestellt.

Bei R8 werden Entsugaren, Verkleinern, Verschleierung, Optimierung und Dexing in einem einzigen Kompilierungsschritt ausgeführt.

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 mit ndkBuild 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.