Questa pagina monitora il ritiro e le rimozioni dell'API Android Gradle plug-in (AGP) fornisce informazioni su come aggiornare il codice di conseguenza.
Tracker ritiri e rimozioni dell'API
La seguente tabella riassume quando le API AGP vengono ritirate e rimosse in termini della versione AGP.
API | Deprecato nella versione AGP | Rimossa dalla versione AGP |
---|---|---|
Component.setAsmFramesComputationMode |
7,2 | |
Component.transformClassesWith |
7,2 | |
RenderScript | 7,2 | |
Trasforma | 7,2 | 8.0 |
AGP 8.0
Di seguito sono riportati importanti aggiornamenti API per AGP 8.0.
L'API Transform è stata rimossa
A partire da AGP 8.0,
Trasforma
L'API viene rimossa. Ciò significa che tutte le classi nel pacchetto
com.android.build.api.transform
rimosso.
È in corso la rimozione dell'API Transform per migliorare le prestazioni della build. Progetti che l'API Transform consente di forzare l'AGP a usare un flusso meno ottimizzato per la build può causare grandi regressioni nei tempi di build. Inoltre, è difficile utilizzare l'API Transform e la sua combinazione con altre funzionalità Gradle; le API sostitutive puntare a semplificare l'estensione di AGP senza introdurre prestazioni o build problemi di correttezza.
API sostitutive
Non esiste una sola sostituzione per l'API Transform: ci sono nuovi target
API per ogni caso d'uso. Tutte le API sostitutive si trovano nel blocco androidComponents
{}
. Queste API sono tutte disponibili tramite AGP 7.2.
Supporto per la trasformazione di bytecode
Per trasformare il bytecode, utilizza l'API Instrumentation. Per le biblioteche, puoi
registrare una strumentazione solo per le classi di progetto locali; per app e test,
puoi scegliere di registrare una strumentazione solo per le classi locali o per tutte
di Google Cloud, incluse le dipendenze locali e remote. Per utilizzare questa API, è necessario
la strumentazione viene eseguita in modo indipendente su ogni classe, con accesso limitato
in classpath (vedi
createClassVisitor()
per ulteriori informazioni). Questa restrizione migliora le prestazioni
sia di build complete che incrementali e semplifica l'aspetto dell'API. Ogni libreria
viene instrumentato in parallelo non appena è pronto, anziché
la compilazione è completata. Inoltre, una modifica in un singolo corso
solo le classi interessate devono essere reinserite in modo incrementale
creare. Per esempio di come utilizzare l'API Instrumentation, consulta
Trasformazione delle classi con ASM
Ricetta AGP.
Supporto per l'aggiunta di corsi generati alla tua app
Per aggiungere altri corsi generati all'app, utilizza il metodo
Artefatti
dell'API con
MultipleArtifact.ALL_CLASSES_DIRS
In particolare, usa
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
con MultipleArtifact.ALL_CLASSES_DIRS
per aggiungere ulteriori
alle classi del progetto. L'API Artifacts seleziona automaticamente
una posizione univoca per l'attività personalizzata in cui eseguire l'output. Consulta le
Ricetta addToAllCorsi
per un esempio di come utilizzare questa API.
Supporto per le trasformazioni basato sull'analisi dell'intero programma
Per implementare trasformazioni basate sull'analisi dell'intero programma, tutte le classi possono essere trasformati insieme in una singola attività. Questo approccio deve essere utilizzato con cautela poiché ha un costo per le prestazioni di build molto più elevato rispetto all'uso della strumentazione tramite Google Cloud CLI o tramite l'API Compute Engine. Se il plug-in utilizza questa API, è consigliabile eseguire la trasformazione attivare la funzionalità per ogni tipo di build, in modo che lo sviluppatore dell'app possa disattivarla build di sviluppo.
Per registrare un'attività che trasforma tutte le classi insieme, è necessario il plug-in Android per Gradle 7.4
introduce
Artifacts.forScope
tramite Google Cloud CLI
o tramite l'API Compute Engine. Per trasformare tutte le classi nel progetto attuale, usa
Artifacts.forScope.PROJECT
. Per trasformare tutte le classi nel progetto attuale,
i progetti importati e tutte le dipendenze esterne utilizzano Artifacts.forScope.ALL
.
Il seguente codice mostra come utilizzare Artifacts.forScope.ALL
per registrare un
che trasforma tutte le classi insieme:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Consulta le formula modificaProjectCorsi per vedere un esempio di come utilizzare questa API Ricetta agpDsl di personalizzazione per un esempio di come registrare estensioni personalizzate nei tipi di build Android.
Se il tuo caso d'uso non è coperto da uno dei AndroidComponents API: segnala un bug.
Diversi plug-in di uso comune sono già stati migrati per utilizzare queste nuove API, incluso il plug-in Firebase Performance Monitoring (1.4.1 è compatibile con AGP 8.0) e il plug-in Hilt Gradle (2.40.1 è compatibile con AGP 8.0). L'AGP L'Assistente per l'upgrade aiuterà anche gli sviluppatori dei progetti a eseguire l'upgrade di uso comune i plug-in necessari.
Se utilizzi l'API Transform tramite un plug-in di terze parti, consenti l'autore sa che il suo plug-in dovrà essere aggiornato per funzionare con le nuove API per AGP 8.0.
AGP 7.2
Di seguito sono riportati importanti aggiornamenti API per AGP 7.2.
RenderScript è deprecato
A partire da AGP 7.2, le API RenderScript sono deprecate. Continuerà funzioni, ma richiamare avvisi e verrà rimossa completamente in futuro tutte le versioni di AGP. Per indicazioni su come passare da RenderScript, vedi Eseguire la migrazione da RenderScript.
Component.transformClassesWith
e Component.setAsmFramesComputationMode
sono deprecati
A partire da AGP 7.2, le API di strumentazione bytecode di classe
Component.transformClassesWith
e
Le risorse Component.setAsmFramesComputationMode
sono deprecate. Sono stati spostati in un nuovo blocco, Component.instrumentation
, che
contiene tutte le API relative alla configurazione del processo di strumentazione. A
continuano a utilizzare queste funzionalità di strumentazione, usa le API corrispondenti
il nuovo blocco, come mostrato dal seguente snippet di codice:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}