Bu sayfada, Android Gradle eklentisi (AGP) API'lerinin desteğinin sonlandırılması ve kaldırılması izlenir ve kodunuzu buna göre nasıl güncelleyeceğiniz hakkında bilgi verilir.
API desteğinin sonlandırılması ve kaldırılması takipçisi
Aşağıdaki tabloda, AGP API'lerinin kullanımdan kaldırılma ve kaldırılma zamanları AGP sürümü açısından özetlenmektedir.
API | AGP sürümünde desteği sonlandırıldı | AGP sürümünden kaldırıldı |
---|---|---|
Component.setAsmFramesComputationMode |
7.2 | |
Component.transformClassesWith |
7.2 | |
RenderScript | 7.2 | |
Dönüştürme | 7.2 | 8.0 |
AGP 8.8
Aşağıda, AGP 8.8 için önemli API güncellemeleri verilmiştir.
Kaynak yapılandırmalarının desteği sonlandırıldı
Kaynak yapılandırmaları, AGP 8.8 itibarıyla desteği sonlandırılmıştır.
Bu, AGP artık farklı kaynak yoğunluklarını desteklemediği ve Google Play Console'da uygulamaların artık uygulama paketi olarak yayınlanması gerektiği için yapıldı.
Dil yapılandırması için yerel ayar yapılandırmalarını ilgili kaynaklarla eşlemek üzere localeFilters
DSL'sini kullanarak uygulamanızın desteklediği yerel ayarları belirtebilirsiniz.
AGP 8.0
Aşağıda, AGP 8.0 için önemli API güncellemeleri verilmiştir.
Dönüşüm API'si kaldırıldı
AGP 8.0'dan itibaren Transform API'si kaldırıldı. Bu, com.android.build.api.transform
paketindeki tüm sınıfların kaldırıldığı anlamına gelir.
Derleme performansını iyileştirmek için Transform API kaldırılıyor. Dönüşüm API'sini kullanan projeler, AGP'nin derleme için daha az optimize edilmiş bir akış kullanmasına neden olur. Bu durum, derleme sürelerinde büyük gerilemelere neden olabilir. Dönüşüm API'sini kullanmak ve diğer Gradle özellikleriyle birleştirmek de zordur. Değişim API'leri, performans veya derleme doğruluğu sorunları oluşturmadan AGP'yi genişletmeyi kolaylaştırmayı amaçlar.
Değişim API'leri
Transform API'nin tek bir yerine geçecek bir API yoktur. Her kullanım alanı için yeni, hedeflenmiş API'ler vardır. Tüm değişim API'leri androidComponents
{}
bloğundadır. Bu API'lerin tümü AGP 7.2 ile kullanılabilir.
Kod dönüştürme desteği
Kod dizini dönüştürmek için Instrumentation API'yi kullanın. Kitaplıklar için yalnızca yerel proje sınıfları için bir enstrümantasyon kaydedebilirsiniz. Uygulamalar ve testler için ise yalnızca yerel sınıflar veya yerel ve uzak bağımlılıklar dahil tüm sınıflar için enstrümantasyon kaydedebilirsiniz. Bu API'yi kullanmak için enstrümantasyon, sınıf yolu içindeki diğer sınıflara sınırlı erişimle her sınıfta bağımsız olarak çalışır (daha fazla bilgi için createClassVisitor()
bölümüne bakın). Bu kısıtlama, hem tam hem de artımlı derlemelerin performansını iyileştirir ve API yüzeyini basit tutar. Her kütüphane, tüm derleme tamamlandıktan sonra değil, hazır olur olmaz paralel olarak enstrümante edilir. Ayrıca, tek bir sınıfta yapılan bir değişiklik, yalnızca etkilenen sınıfların artımlı derlemede yeniden araçlandırılması gerektiği anlamına gelir. Instrumentation API'nin nasıl kullanılacağına dair örnek için ASM ile sınıfları dönüştürme APG tarifine bakın.
Oluşturulan sınıfları uygulamanıza ekleme desteği
Uygulamaya oluşturulmuş başka sınıflar eklemek için MultipleArtifact.ALL_CLASSES_DIRS
ile Artifacts API'sini kullanın.
Özellikle şunu kullanın:
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
MultipleArtifact.ALL_CLASSES_DIRS
ile proje sınıflarına oluşturulan ek dizinleri eklemek için. Artifacts API, özel görevinizin çıktısının verileceği benzersiz bir konumu otomatik olarak seçer. Bu API'nin nasıl kullanılacağına dair örnek için addToAllClasses tarifine bakın.
Tüm program analizine dayalı dönüşümler için destek
Tüm program analizine dayalı dönüşümleri uygulamak için tüm sınıflar tek bir görevde birlikte dönüştürülebilir. Instrumentation API'yi kullanmaktan çok daha yüksek bir derleme performans maliyeti olduğundan bu yaklaşım dikkatli bir şekilde kullanılmalıdır. Eklentiniz bu API'yi kullanıyorsa uygulama geliştiricinin geliştirme derlemeleri için devre dışı bırakabilmesi amacıyla dönüşümün derleme türü başına etkinleştirilmesinin önerilmesi gerekir.
Tüm sınıfları birlikte dönüştüren bir görev kaydetmek için Android Gradle eklentisi 7.4'te Artifacts.forScope API'si kullanıma sunulmuştur. Mevcut projedeki tüm sınıfları dönüştürmek için Artifacts.forScope.PROJECT
simgesini 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
değerini kullanın.
Aşağıdaki kodda, tüm sınıfları birlikte dönüştüren bir görev kaydetmek için Artifacts.forScope.ALL
'ün nasıl kullanılacağı gösterilmektedir:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Bu API'nin nasıl kullanılacağına dair örnek için modifyProjectClasses tarifine, Android derleme türlerine özel uzantıların nasıl kaydedileceğine dair örnek için customizeAgpDsl tarifine bakın.
Kullanım alanınız AndroidComponents API'lerinden hiçbirini kapsamıyorsa lütfen hata kaydı gönderin.
Yaygın olarak kullanılan bazı eklentiler, 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 bu yeni API'leri kullanmaya zaten geçiş yaptı. AGP Yükseltme Asistanı, proje geliştiricilerine yaygın olarak kullanılan eklentileri gerektiğinde yükseltme konusunda da yardımcı olur.
Transform API'yi üçüncü taraf eklentisi aracılığıyla kullanıyorsanız lütfen eklentinin 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ı
AGP 7.2'den itibaren RenderScript API'lerinin desteği sonlandırıldı. Bu özellikler çalışmaya devam edecek ancak uyarılar tetikleyecek ve AGP'nin gelecekteki sürümlerinde tamamen kaldırılacaktır. RenderScript'ten geçiş yapmayla ilgili yol gösterici bilgiler için RenderScript'ten geçiş yapma başlıklı makaleyi inceleyin.
Component.transformClassesWith
ve Component.setAsmFramesComputationMode
desteği sonlandırıldı
AGP 7.2'den itibaren Component.transformClassesWith
ve Component.setAsmFramesComputationMode
sınıf bytecode enstrümantasyon API'lerinin desteği sonlandırılmıştır. Bu API'ler, enstrümantasyon sürecini yapılandırmayla ilgili tüm API'leri içeren yeni bir blok olan Component.instrumentation
'e taşındı. Bu enstrümantasyon özelliklerini kullanmaya devam etmek için aşağıdaki kod snippet'inde gösterildiği gibi yeni bloktaki 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
)
})
}