Auf dieser Seite werden die Einstellung und Entfernungen der Android Gradle Plugin API (AGP) sowie Informationen dazu, wie Sie Ihren Code entsprechend aktualisieren können.
Tracker für eingestellte und entfernte APIs
In der folgenden Tabelle ist zusammengefasst, wann AGP APIs eingestellt und entfernt werden: der AGP-Version.
API | In AGP-Version eingestellt | Aus AGP-Version entfernt |
---|---|---|
Component.setAsmFramesComputationMode |
7,2 | |
Component.transformClassesWith |
7,2 | |
RenderScript | 7,2 | |
Transformieren | 7,2 | 8.0 |
8.0 AGP
Im Folgenden finden Sie wichtige API-Updates für AGP 8.0.
Transform API entfernt
Ab AGP 8.0 wird das
Transformieren
API wurde entfernt. Das bedeutet, dass alle Klassen im Paket
com.android.build.api.transform
wurden entfernt.
Die Transform API wird entfernt, um die Build-Leistung zu verbessern. Projekte, die Transform API erzwingen, dass AGP einen weniger optimierten Ablauf für den Build verwendet, kann dies zu erheblichen Verkürzungen der Build-Zeiten führen. Außerdem ist es schwierig, Transform API zu erstellen und mit anderen Gradle-Features zu kombinieren. die Ersatz-APIs Es soll einfacher sein, den AGP ohne Leistungseinbußen oder Entwicklung Korrektheit der Antworten.
Ersatz-APIs
Es gibt keinen einzigen Ersatz für die Transform API – es gibt neue, zielgerichtete
APIs für jeden Anwendungsfall Alle Ersatz-APIs befinden sich im Block androidComponents
{}
. Diese APIs sind alle bis zum AGP 7.2 verfügbar.
Unterstützung für die Transformation von Bytecode
Verwenden Sie zum Transformieren von Bytecode die Instrumentation API. Für Bibliotheken haben Sie folgende Möglichkeiten:
Instrumentierungen nur für lokale Projektklassen registrieren für Apps und Tests,
kannst du eine Instrumentierung nur für lokale Kurse oder für alle
einschließlich lokaler und Remote-Abhängigkeiten. Um diese API zu verwenden,
die Instrumentierung in jeder Klasse unabhängig ausgeführt wird, mit eingeschränktem Zugriff auf andere
Klassen im classpath (siehe
createClassVisitor()
. Durch diese Einschränkung wird die Leistung von
vollständige und inkrementelle Builds erstellen
und die API-Oberfläche einfach halten. Jede Bibliothek
und wird parallel eingesetzt, sobald sie bereit ist,
ist abgeschlossen. Darüber hinaus kann eine Änderung in einem einzelnen Kurs
bedeutet, dass nur betroffene Klassen schrittweise neu instrumentiert werden müssen
erstellen. Beispiele für die Verwendung der Instrumentation API finden Sie auf der
Klassen mit ASM transformieren
AGP-Rezept.
Unterstützung für das Hinzufügen generierter Klassen zu Ihrer App
Um der App zusätzliche generierte Klassen hinzuzufügen, verwenden Sie die
Artefakte
API mit
MultipleArtifact.ALL_CLASSES_DIRS
Verwenden Sie insbesondere
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
mit MultipleArtifact.ALL_CLASSES_DIRS
, um zusätzliche generierte
zu den Projektklassen. Die Artifacts API wählt automatisch
an einen eindeutigen Speicherort für die Ausgabe
Ihrer benutzerdefinierten Aufgabe. Weitere Informationen finden Sie in der
addToAllclass-Rezept
finden Sie ein Beispiel für die Verwendung dieser API.
Unterstützung für Transformationen basierend auf der Analyse des gesamten Programms
Um Transformationen zu implementieren, die auf der Analyse des gesamten Programms basieren, können alle Klassen in einer Aufgabe transformiert werden. Dieser Ansatz sollte mit Vorsicht angewendet werden da die Build-Leistung wesentlich höher ist als bei Verwendung der Instrumentierung der API erstellen. Wenn Ihr Plug-in diese API verwendet, wird empfohlen, die Transformation muss für jeden Build-Typ aktiviert sein, damit der App-Entwickler sie für Entwicklungs-Builds.
Zum Registrieren einer Aufgabe, die alle Klassen zusammen transformiert, müssen Sie das Android-Gradle-Plug-in 7.4
stellt den
Artifacts.forScope (Artefakte.forScope)
der API erstellen. Verwenden Sie zum Transformieren aller Klassen im aktuellen Projekt den
Artifacts.forScope.PROJECT
Um alle Klassen im aktuellen Projekt zu transformieren,
importierten Projekten und allen externen Abhängigkeiten verwenden Sie Artifacts.forScope.ALL
.
Der folgende Code zeigt, wie Sie mit Artifacts.forScope.ALL
einen
-Aufgabe, die alle Klassen zusammen transformiert:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Weitere Informationen finden Sie in der modifyProjectMembers-Schema finden Sie ein Beispiel für die Verwendung dieser API. Rezept anpassenAgpDsl .
Wird Ihr Anwendungsfall von keinem der Android-Komponenten APIs, melden Sie den Fehler.
Mehrere häufig verwendete Plug-ins wurden bereits migriert, um diese neuen APIs zu verwenden. einschließlich des Firebase Performance Monitoring-Plug-ins (1.4.1 ist kompatibel mit AGP 8.0) und das Hilt Gradle-Plug-in (2.40.1 ist mit AGP 8.0 kompatibel). AGP Der Upgrade-Assistent unterstützt auch Projektentwickler beim Upgrade gängiger Plug-ins nach Bedarf ein.
Wenn Sie die Transform API über ein Drittanbieter-Plug-in verwenden, Autor wissen, dass ihr Plug-in aktualisiert werden muss, damit sie mit den neuen APIs kompatibel sind. für AGP 8.0.
7.2 AGP
Im Folgenden finden Sie wichtige API-Updates zu AGP 7.2.
RenderScript wurde eingestellt
Ab AGP 7.2 werden die RenderScript APIs eingestellt. Sie werden weiterhin bis zum Funktionieren, aber das Auslösen von Warnungen, und wird in Zukunft vollständig entfernt. Versionen von AGP. Eine Anleitung zum Wechsel von RenderScript finden Sie unter Migration von RenderScript
Component.transformClassesWith
und Component.setAsmFramesComputationMode
wurden eingestellt
Ab AGP 7.2 bieten die Klassen-Bytecode-Instrumentierungs-APIs
Component.transformClassesWith
und
Component.setAsmFramesComputationMode
wurden verworfen. Sie wurden in den neuen Block Component.instrumentation
verschoben,
enthält alle APIs für die Konfiguration des Instrumentierungsprozesses. Bis
diese Instrumentierungsfunktionen weiter nutzen, nutzen Sie die entsprechenden APIs in
in den neuen Block, wie im folgenden Code-Snippet gezeigt:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}