Bu sayfada, Android Gradle eklentisi (AGP) API için desteğin sonlandırılması ve kaldırılması, kodunuzu nasıl güncelleyebileceğinize ilişkin bilgiler sağlar.
API desteği sonlandırma ve kaldırma izleyicisi
Aşağıdaki tabloda, AGP API'lerinin AGP sürümünün şartlarına tabidir.
API | AGP sürümünde kullanımdan kaldırıldı | AGP sürümünden kaldırıldı |
---|---|---|
Component.setAsmFramesComputationMode |
7.2 | |
Component.transformClassesWith |
7.2 | |
Oluşturma Komut Dosyası | 7.2 | |
Dönüştürme | 7.2 | 8.0 |
AGP 8.0
Aşağıda, AGP 8.0 için önemli API güncellemeleri verilmiştir.
Transform API kaldırıldı
AGP 8.0'dan başlayarak
Dönüştürme
API kaldırıldı. Bu, paketteki tüm sınıfların
com.android.build.api.transform
kaldırıldı.
Transform API, derleme performansını iyileştirmek için kaldırılıyor. Projeler, kullanan derleme için daha az optimize edilmiş bir akış kullanmaya derleme sürelerinde büyük regresyonlara neden olabilir. Ayrıca tek bir yerde toplamak API'yi dönüştürme ve diğer Gradle özellikleriyle birleştirme eski API'lerin yerini alacak performans veya güncelleme sağlamadan AGP'yi genişletmeyi kolaylaştırmayı hedefleyin emin olun.
Yerine Kullanılabilecek API'ler
Transform API tek bir alternatifi yoktur. Yeni, hedeflenmiş
Her kullanım alanına özel API'ler. Yeni API'lerin tümü androidComponents
{}
bloğundadır. Bu API'lerin tümü AGP 7.2'de mevcuttur.
Bayt kodunu dönüştürme desteği
Bayt kodunu dönüştürmek için Instrumentation API'yi kullanın. Kütüphanelerde
yalnızca yerel proje sınıfları için bir araç kaydetmelidir; uygulama ve testler için
bir enstrümantasyonu sadece yerel sınıflar ya da tüm
bağımlılıkları da dahil olmak üzere
sınıfları kastediyoruz. Bu API'yi kullanmak için
enstrümantasyon her sınıfta bağımsız olarak çalışır ve diğer
sınıf yolundaki sınıflar (bkz.
createClassVisitor()
bakın). Bu kısıtlama,
tam ve artımlı derlemeleri içerir ve API yüzeyini basit tutar. Her kitaplık
hazır olduğunda paralel olarak takip edilmelidir.
derleme tamamlandı. Ayrıca, tek bir sınıftaki değişiklik
Dolayısıyla, yalnızca etkilenen sınıfların kademeli olarak
seçeceğiz. Enstrümantasyon API'sinin nasıl kullanılacağı hakkında örnek için bkz.
ASM ile sınıfları dönüştürme
AGP tarifi.
Oluşturulan sınıfları uygulamanıza ekleme desteği
Uygulamaya, oluşturulmuş başka sınıflar eklemek için
Yapılar
Şununla API:
MultipleArtifact.ALL_CLASSES_DIRS
.
Özel olarak,
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
oluşturulan verileri eklemek için MultipleArtifact.ALL_CLASSES_DIRS
ile
proje sınıflarına ekleyeceksiniz. Artifacts API, otomatik olarak
özel görevinizin çıkış oluşturacağı benzersiz bir konum oluşturabilirsiniz. Bkz.
addToAllClasses tarifi
bu API'nin nasıl kullanılacağını gösteren bir örnek bulabilirsiniz.
Tüm program analizine dayalı dönüşüm desteği
Tüm program analizine dayalı dönüşümler uygulamak için tüm sınıflar dönüştürüldüğünden emin olmanız gerekir. Bu yaklaşım dikkatli kullanılmalıdır. çünkü Enstrümantasyonu kullanmaya kıyasla çok daha yüksek bir derleme performansı maliyetine sahiptir. API'ye gidin. Eklentiniz bu API'yi kullanıyorsa dönüştürme işleminin uygulama geliştiricisinin devre dışı bırakabilmesi için her derleme türüne göre kaydolmalıdır birkaç örnektir.
Tüm sınıfları birlikte dönüştüren bir görevi kaydetmek için Android Gradle eklentisi 7.4
tanıtım amaçlı
Artifacts.forScope
API'ye gidin. Mevcut projedeki tüm sınıfları dönüştürmek için şunu kullanın:
Artifacts.forScope.PROJECT
Mevcut projedeki tüm sınıfları dönüştürmek için
içe aktarılan projelerin ve tüm dış bağımlılıkların Artifacts.forScope.ALL
parametresini kullanın.
Aşağıdaki kod, birArtifacts.forScope.ALL
dönüştüren bir görev bulunuyor:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Bkz. modifyProjectClasses tarifi bu API'nin nasıl kullanılacağına dair bir örnek ve customizeAgpDsl tarifi başlıklı makaleyi inceleyin.
Kullanım alanınız Android Bileşenleri API'ler için lütfen hata bildiriminde bulunun.
Yaygın olarak kullanılan bazı eklentiler, bu yeni API'leri kullanmak için zaten taşınmıştır. Firebase performans izleme eklentisi dahil (1.4.1, AGP 8.0) ve Hilt Gradle eklentisi (2.40.1, AGP 8.0 ile uyumludur). AGP Yükseltme Asistanı, proje geliştiricilerin sık kullanılan uygulamaları yeni sürüme geçirmelerine de yardımcı olur. gerektiği gibi ekleyin.
Transform API'yi bir üçüncü taraf eklentisi aracılığıyla kullanıyorsanız lütfen yazar, eklentilerinin yeni API'larla çalışması için güncellenmesi gerektiğini biliyor. indirin.
AGP 7.2
Aşağıda, AGP 7.2 için önemli API güncellemeleri verilmiştir.
RenderScript kullanımdan kaldırıldı
AGP 7.2'den itibaren RenderScript API'leri kullanımdan kaldırılmıştır. Devam edecek ve ileride tamamen kaldırılır. AGP sürümlerini kapsıyor. RenderScript'ten geçişle ilgili yardım için bkz. RenderScript'ten taşıma.
Component.transformClassesWith
ve Component.setAsmFramesComputationMode
desteği sonlandırıldı
AGP 7.2'den itibaren sınıf bayt kodu aracı API'leri
Component.transformClassesWith
ve
Component.setAsmFramesComputationMode
desteği sonlandırıldı. Yeni bir bloğa (Component.instrumentation
) taşındılar.
enstrümantasyon sürecinin yapılandırılmasıyla ilgili tüm API'leri içerir. Alıcı:
bu araçlardaki özellikleri kullanmaya devam etmek için
aşağıdaki kod snippet'inde gösterildiği gibi yeni blok oluşturun:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}