Android-Gradle-Plug-in 3.6.0 (Februar 2020)

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

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:

  1. Fügen Sie das Flag -Pandroid.enableProfileJson=true hinzu, wenn einen Gradle-Build ausführen. Beispiel:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Öffnen Sie den Chrome-Browser und geben Sie chrome://tracing ein in in die Suchleiste ein.

  3. 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 Dateiname profile-<var>timestamp</var>.json.gz

Die Attributionsdaten für native Builds sehen Sie oben in der Zuschauer:

Nativer Trace für die Build-Attribution in Chrome

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";
                  }
                }