Bu sayfada, Android Gradle eklentisi (AGP) API için desteğin sonlandırılması ve kaldırılması izlenmekte ve kodunuzu uygun şekilde nasıl güncelleyeceğiniz hakkında bilgiler verilmektedir.
API'leri kullanımdan kaldırma ve kaldırma izleyicisi
Aşağıdaki tabloda, AGP API'lerin ne zaman kullanımdan kaldırıldığı ve kaldırıldığı zaman AGP sürümü bağlamında özetlenmiştir.
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 | |
RenderScript | 7,2 | |
Dönüşüm | 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 itibaren Transform API'si kaldırılmıştır. Bu durumda, com.android.build.api.transform
paketindeki tüm sınıflar kaldırılır.
Transform API, derleme performansını iyileştirmek için kaldırılıyor. Transform API AGP'yi kullanan projeler, derleme için daha az optimize edilmiş bir akış kullanmaya başlar. Bu durum, derleme sürelerinde büyük regresyonlara yol açabilir. Transform API'yi kullanmak ve diğer Gradle özellikleriyle birleştirmek de zordur. Bunların yerine gelecek API'ler, performans veya düzeltme sorunları oluşturmadan AGP'nin genişletilmesini kolaylaştırmayı amaçlar.
Yedek API'ler
Transform API'nin tek bir alternatifi yoktur. Her kullanım alanı için yeni ve hedeflenmiş API'ler vardır. Tüm yedek API'ler androidComponents
{}
bloğundadır. Bu API'lerin tümü AGP 7.2 tarafından kullanılabilir.
Bayt kodunu dönüştürme desteği
Bayt kodunu dönüştürmek için Instrumentation API'yi kullanın. Kitaplıklarda bir aracı yalnızca yerel proje sınıfları için kaydedebilirsiniz. Uygulamalar ve testlerde, araçları yalnızca yerel sınıflar veya yerel ve uzaktan bağımlılıklar dahil tüm sınıflar için kaydetmeyi seçebilirsiniz. Bu API'yi kullanmak için araçlar her sınıfta bağımsız olarak çalışır ve sınıf yolundaki diğer sınıflara sınırlı erişim sunar (daha fazla bilgi için bkz. createClassVisitor()
). Bu kısıtlama, hem tam hem de artımlı derlemelerin performansını iyileştirir ve API yüzeyini basit tutar. Her kitaplık, tüm derleme tamamlandıktan sonra değil, hazır olduğunda paralel olarak ayarlanır. Ayrıca, tek bir sınıfta yapılan değişiklik, yalnızca etkilenen sınıfların artımlı bir derlemede yeniden uygulanması gerektiği anlamına gelir. Örneğin, Enstrümantasyon API'sinin nasıl kullanılacağıyla ilgili olarak Sınıfları ASM ile dönüştürme AGP tarifine bakın.
Uygulamanıza oluşturulmuş sınıflar ekleme desteği
Uygulamaya yeni oluşturulmuş sınıflar eklemek için Artifacts API'yi MultipleArtifact.ALL_CLASSES_DIRS
ile kullanın.
Özellikle,
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
MultipleArtifact.ALL_CLASSES_DIRS
ile oluşturabilirsiniz. Artifacts API, özel göreviniz için otomatik olarak benzersiz bir konum seçer. Bu API'nin nasıl kullanılacağına dair bir örnek için addToAllClassroom tarifine bakın.
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 tek bir görevde birlikte dönüştürülebilir. Bu yaklaşım, Enstrümantasyon API'sini kullanmaya kıyasla çok daha yüksek bir derleme performansı maliyetine sahip olduğundan dikkatli bir şekilde kullanılmalıdır. Eklentiniz bu API'yi kullanıyorsa uygulama geliştiricisinin bunu geliştirme derlemeleri için devre dışı bırakabilmesi için dönüşümün her derleme türü için etkinleştirilmesi önerilir.
Tüm sınıfları dönüştüren bir görevi kaydetmek için Android Gradle eklentisi 7.4, Artifacts.forScope API'sini kullanıma sundu. Mevcut projedeki tüm sınıfları dönüştürmek için Artifacts.forScope.PROJECT
kodunu kullanın. Mevcut projedeki tüm sınıfları, içe aktarılan projeleri ve tüm harici bağımlılıkları dönüştürmek için Artifacts.forScope.ALL
kullanın.
Aşağıdaki kod, tüm sınıfları birlikte dönüştüren bir görevi kaydetmek için Artifacts.forScope.ALL
özelliğinin nasıl kullanılacağını gösterir:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Bu API'nin nasıl kullanılacağıyla ilgili bir örnek için modifyProjectSınıf tarifine, özel uzantıların Android derleme türlerine nasıl kaydedileceğine dair bir örnek için customizeAgpDsl tarifine bakın.
Kullanım alanınız AndroidBileşenleri API'lerinin hiçbiri kapsamında değilse lütfen hata bildiriminde bulunun.
Firebase performans izleme eklentisi (1.4.1, AGP 8.0 ile uyumludur) ve Hilt Gradle eklentisi (2.40.1, AGP 8.0 ile uyumludur) dahil olmak üzere, yaygın olarak kullanılan birçok eklenti bu yeni API'leri kullanmak için halihazırda taşınmıştır. AGP Yükseltme Asistanı, proje geliştiricilerinin gerektiğinde yaygın olarak kullanılan eklentileri yükseltmesine de yardımcı olur.
Transform API'yi bir üçüncü taraf eklentisi aracılığıyla kullanıyorsanız lütfen yazarına, eklentisinin AGP 8.0 için yeni API'lerle çalışacak şekilde güncellenmesi gerektiğini bildirin.
AGP 7,2
Aşağıda, AGP 7.2 için önemli API güncellemeleri verilmiştir.
RenderScript desteği sonlandırıldı
RenderScript API'leri AGP 7.2'den itibaren kullanımdan kaldırılmıştır. Bunlar çalışmaya devam eder, ancak uyarı çağırır ve gelecekteki AGP sürümlerinde tamamen kaldırılır. RenderScript'ten geçiş yapma konusunda yardım için RenderScript'ten taşıma bölümüne bakın.
Component.transformClassesWith
ve Component.setAsmFramesComputationMode
desteği sonlandırıldı
AGP 7.2'den itibaren, sınıf bayt kodu enstrümantasyon API'leri Component.transformClassesWith
ve Component.setAsmFramesComputationMode
kullanımdan kaldırılmıştır. Ekip, araçlar işleminin yapılandırılmasıyla ilgili tüm API'leri içeren Component.instrumentation
adlı yeni bir bloka taşındı. Bu araç özelliklerini kullanmaya devam etmek için yeni blokta aşağıdaki kod snippet'inde gösterildiği gibi ilgili API'leri kullanın:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}