Na tej stronie znajdziesz informacje o wycofaniu i usuwaniu wtyczki Android Gradle (AGP) na interfejs API oraz zawiera informacje o tym, jak odpowiednio zaktualizować kod.
Śledzenie wycofania i usuwania interfejsów API
W tej tabeli podsumowujemy, kiedy interfejsy API AGP są wycofywane i usuwane w wersji AGP.
Interfejs API | Wycofane w wersji AGP | Usunięto z wersji AGP |
---|---|---|
Component.setAsmFramesComputationMode |
7.2 | |
Component.transformClassesWith |
7.2 | |
Skrypt renderowania | 7.2 | |
Przekształć | 7.2 | z Androidem 8.0 |
AGP 8.0
Poniżej znajdziesz ważne aktualizacje interfejsu API AGP 8.0.
Interfejs Transform API został usunięty
Począwszy od AGP 8.0,
Przekształć
Interfejs API został usunięty. Oznacza to, że wszystkie zajęcia w pakiecie
Usunięto com.android.build.api.transform
.
Interfejs Transform API jest usuwany, aby zwiększyć wydajność kompilacji. Projekty, które użyj interfejsu Transform API force AGP, aby użyć mniej zoptymalizowanego przepływu w kompilacji, która może spowodować duże opóźnienia w czasie kompilacji. Trudno jest też używać Transform API i połączyć go z innymi funkcjami Gradle, nowe interfejsy API ułatwienie rozszerzenia AGP bez zwiększania wydajności problemy ze zgodnością.
Zapasowe interfejsy API
Nie ma jednego zamienników interfejsu Transform API –
Interfejsy API do każdego przypadku użycia. Wszystkie zastępcze interfejsy API znajdują się w bloku androidComponents
{}
. Wszystkie te interfejsy API są dostępne w ramach AGP 7.2.
Obsługa przekształcania kodu bajtowego
Aby przekształcić kod bajtowy, użyj interfejsu Instrumentation API. W przypadku bibliotek możesz
rejestrować narzędzia tylko na potrzeby lokalnych zajęć związanych z projektami; na potrzeby aplikacji i testów,
możesz zarejestrować instrumentację tylko dla lokalnych zajęć albo dla wszystkich
klas, w tym zależności lokalnych i zdalnych. Aby użyć tego interfejsu API,
narzędzia działają niezależnie na poszczególnych zajęciach, z ograniczonym dostępem do pozostałych,
klas w ścieżce zajęć (zobacz
createClassVisitor()
). To ograniczenie poprawia skuteczność
w kompilacji pełnych i przyrostowych, a interfejs API jest prosty. Każda biblioteka
jest konfigurowany równolegle, gdy tylko jest gotowy,
kompilacja ukończona. Oprócz tego zmiana w jednych zajęciach
co oznacza, że tylko klasy, których dotyczy problem, muszą być przyporządkowane
tworzyć. Aby dowiedzieć się, jak korzystać z interfejsu Instrumentation API, zapoznaj się z
Przekształcanie klas za pomocą ASM
Przepis AGP.
Obsługa dodawania wygenerowanych zajęć do aplikacji
Aby dodać do aplikacji kolejne wygenerowane zajęcia, użyj
Artefakty
Interfejs API z
MultipleArtifact.ALL_CLASSES_DIRS
.
W szczególności użyj
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
z MultipleArtifact.ALL_CLASSES_DIRS
, aby dołączyć wygenerowane dodatkowe
do klas projektu. Interfejs Artifacts API wybierze automatycznie
w unikalnej lokalizacji zadania niestandardowego, w której będzie trafiać dane wyjściowe. Zobacz
przepis addToAllClasses
.
Obsługa przekształceń na podstawie analizy całego programu
Aby wdrożyć przekształcenia na podstawie analizy całego programu, wszystkie zajęcia można połączone w jedno zadanie. Z tej metody należy korzystać z rozwagą. ponieważ koszt tworzenia jest znacznie wyższy niż w przypadku narzędzi API. Jeśli wtyczka korzysta z tego interfejsu API, zalecamy przekształcenie wyrazić zgodę dla danego typu kompilacji, tak aby deweloper aplikacji mógł ją wyłączyć i tworzenia aplikacji.
Aby zarejestrować zadanie, które przekształca wszystkie zajęcia, wtyczka Androida do obsługi Gradle w wersji 7.4
przedstawia
Artifacts.forScope
API. Aby przekształcić wszystkie zajęcia w bieżącym projekcie, użyj funkcji
Artifacts.forScope.PROJECT
Aby przekształcić wszystkie zajęcia w bieżącym projekcie:
zaimportowanych projektów i wszystkich zależności zewnętrznych używają Artifacts.forScope.ALL
.
Ten kod pokazuje, jak za pomocą Artifacts.forScope.ALL
zarejestrować
zadanie, które przekształca wszystkie zajęcia:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Zobacz przepis modifyProjectClasses , gdzie znajdziesz przykład korzystania z tego interfejsu API. Przepis na dostosowanie AgpDsl .
Jeśli Twój przypadek użycia nie jest uwzględniony w żadnym Komponenty Androida Interfejsy API, zgłoś błąd.
Kilka popularnych wtyczek zostało już przeniesionych, aby korzystać z tych nowych interfejsów API, oraz wtyczkę do monitorowania wydajności Firebase (wersja 1.4.1 jest zgodna z AGP 8.0) i wtyczki Hilt Gradle (wersja 2.40.1 jest zgodna z formatem AGP 8.0). AGP Asystent uaktualniania pomoże też programistom projektów uaktualnić często używane usługi w razie potrzeby wtyczki.
Jeśli używasz interfejsu Transform API za pomocą wtyczki innej firmy, udostępnij autor wie, że jego wtyczka będzie musiała zostać zaktualizowana, aby działała z nowymi interfejsami API w przypadku standardu AGP 8.0.
AGP 7.2
Poniżej znajdziesz ważne aktualizacje interfejsu API AGP 7.2.
Interfejs RenderScript został wycofany
W AGP 7.2 interfejsy RenderScript API są wycofane. Będą kontynuowane nie działać, ale wywoływać ostrzeżenia i w przyszłości zostanie całkowicie usunięte wersji AGP. Aby uzyskać wskazówki dotyczące wyłączania obsługi RenderScript, zobacz Migracja z języka RenderScript
Interfejs Component.transformClassesWith
i Component.setAsmFramesComputationMode
zostały wycofane
Począwszy od AGP 7.2, interfejsy API instrumentacji kodu bajtowego klasy
Component.transformClassesWith
i
Wycofano Component.setAsmFramesComputationMode
. Przenieśli się do nowego bloku, Component.instrumentation
,
zawiera wszystkie interfejsy API związane z konfigurowaniem procesu instrumentacji. Do
nadal korzystać z tych funkcji instrumentacji, użyj odpowiednich interfejsów API
jak widać w tym fragmencie kodu:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}