Bu sayfada, Android Gradle eklentisi (AGP) API'sinin desteğinin sonlandırılması ve kaldırılmasıyla ilgili bilgiler yer alır. Ayrıca, kodunuzu buna göre nasıl güncelleyeceğinizle ilgili bilgiler de verilmektedir.
API desteğinin sonlandırılması ve kaldırılmasıyla ilgili takip aracı
Aşağıdaki tabloda, AGP API'lerinin AGP sürümü açısından ne zaman kullanımdan kaldırıldığı ve kaldırıldığı ö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.12
Android Gradle eklentisi 8.12.0, aşağıdaki önemli API değişikliklerini içerir.
Davranış değişikliği: includeAndroidResources seçeneği, test dizinindeki manifesti birleştirir
Artık android.testOptions.unitTests.includeAndroidResources seçeneğiyle birim testleri için manifesti özelleştirmek üzere test kaynak dizininizde bir AndroidManifest.xml dosyası oluşturabilirsiniz. Test manifest dosyası, uygulamanın ana manifest dosyasıyla birleştirilir. 127986458 numaralı sorun
AGP 8.10
Android Gradle eklentisi 8.10.0, aşağıdaki önemli API değişikliklerini içerir.
Kaynak düzeyinde zarar veren değişiklik: finalizeDsl artık parametreleştirilmiş türlerin kullanılmasını gerektiriyor
AndroidComponentsExtension öğesinin doğrudan com.android.kotlin.multiplatform.library eklentisiyle kullanılmasına izin vermek için finalizeDsl üzerindeki tür sınırı esnetildi.
Örneğin, uygulamaları ve kitaplıkları ele almak için ham AndroidComponentsExtension türlerini kullanıyorsanız:
extensions.getByType(AndroidComponentsExtension::class).finalizeDsl { androidExtension ->
androidExtension.experimentalProperties["android.example"] = true
}
Yükseltme işleminden önce veya işlem sırasında kaynak kodunuzu aşağıdaki gibi bir koda uyarlamanız gerekir:
extensions.getByType<AndroidComponentsExtension<CommonExtension<*, *, *, *, *, *>, *, *>>().finalizeDsl { androidExtension ->
androidExtension.experimentalProperties["android.example"] = true
}
Hem mevcut com.android.library ve com.android.application eklentileri hem de yeni com.android.kotlin.multiplatform.library eklentisiyle çalışan finalizeDsl kodu yazmak istiyorsanız çalışma zamanında türleri kontrol etmeniz gerekebilir:
extensions.getByType<AndroidComponentsExtension<*, *, *>>().finalizeDsl { androidExtension ->
when(androidExtension) {
is CommonExtension<*, *, *, *, *, *> -> androidExtension.experimentalProperties["android.example"] = true
is KotlinMultiplatformAndroidLibraryExtension -> androidExtension.experimentalProperties["android.example"] = true
}
}
Bu, yalnızca kaynak düzeyinde zarar veren bir değişikliktir ve ikili eklentileri etkilemez.
AGP 8.8
Aşağıda, AGP 8.8 için önemli API güncellemeleri yer almaktadır.
Kaynak yapılandırmaları kullanımdan kaldırıldı
Kaynak yapılandırmaları, AGP 8.8'den itibaren kullanımdan kaldırılmıştır. AGP artık farklı kaynak yoğunluklarını desteklemediği ve Google Play Console artık uygulamaların App Bundle olarak yayınlanmasını zorunlu kıldığı için bu değişiklik yapıldı. Dil yapılandırması için localeFilters DSL'yi kullanarak uygulamanızın desteklediği yerel ayarları belirtebilir ve yerel ayar yapılandırmalarını ilgili kaynaklarla eşleyebilirsiniz.
AGP 8.0
Aşağıda AGP 8.0 için önemli API güncellemeleri yer almaktadır.
Transform API kaldırıldı
AGP 8.0'dan itibaren Transform API kaldırılmıştır. Bu, com.android.build.api.transform paketindeki tüm sınıfların kaldırıldığı anlamına gelir.
Transform API, derleme performansını artırmak için kaldırılıyor. Transform API'yi kullanan projeler, AGP'yi derleme için daha az optimize edilmiş bir akış kullanmaya zorlar. Bu da derleme sürelerinde büyük gerilemelere neden olabilir. Transform API'yi kullanmak ve diğer Gradle özellikleriyle birleştirmek de zordur. Değiştirme API'leri, performans veya derleme doğruluğu sorunları olmadan AGP'yi genişletmeyi 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ıklar için yalnızca yerel proje sınıflarına yönelik bir araç kaydı yapabilirsiniz. Uygulamalar ve testler için ise yalnızca yerel sınıflara veya yerel ve uzak bağımlılıklar dahil olmak üzere tüm sınıflara yönelik bir araç kaydı yapmayı seçebilirsiniz. Bu API'yi kullanmak için araçlar, sınıf yolundaki 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() adresini ziyaret edin).
Bu kısıtlama, hem tam hem de artımlı derlemelerin performansını artırır ve API yüzeyini düzenli tutar. Her kitaplık, tüm derleme işlemi tamamlandıktan sonra değil, hazır olur olmaz paralel olarak donatılır. Ayrıca, tek bir sınıfta yapılan değişiklik, artımlı derlemede yalnızca etkilenen sınıfların yeniden donatılması gerektiği anlamına gelir. Instrumentation API'nin nasıl kullanılacağına dair bir örnek için Sınıfları ASM ile dönüştürme AGP tarifine bakın.
Oluşturulan sınıfları uygulamanıza ekleme desteği
Uygulamaya başka oluşturulan sınıflar eklemek için MultipleArtifact.ALL_CLASSES_DIRS ile Artifacts API'yi kullanın. Özellikle,
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
MultipleArtifact.ALL_CLASSES_DIRS ile birlikte kullanarak proje sınıflarına
oluşturulan ek dizinler ekleyebilirsiniz. Artifacts API, özel görevinizin çıktı vereceği benzersiz bir konumu otomatik olarak seçer. Bu API'nin nasıl kullanılacağına dair bir ö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. Bu yaklaşım, Instrumentation API'yi kullanmaya kıyasla çok daha yüksek bir derleme performansı maliyetine sahip olduğundan dikkatli kullanılmalıdır. Eklentiniz bu API'yi kullanıyorsa dönüşümün derleme türüne göre etkinleştirilmesi önerilir. Böylece uygulama geliştirici, geliştirme derlemeleri için dönüşümü devre dışı bırakabilir.
Android Gradle eklentisi 7.4, tüm sınıfları birlikte dönüştüren bir görevi kaydetmek için Artifacts.forScope API'yi kullanıma sunar. Mevcut projedeki tüm sınıfları dönüştürmek için Artifacts.forScope.PROJECT kullanın. Mevcut projedeki, içe aktarılan projelerdeki ve tüm harici bağımlılıklardaki tüm sınıfları dönüştürmek için Artifacts.forScope.ALL kullanın. Aşağıdaki kodda, tüm sınıfları birlikte dönüştüren bir görevi kaydetmek için Artifacts.forScope.ALL öğesinin 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 bir örnek için modifyProjectClasses tarifine, özel uzantıların Android derleme türlerine nasıl kaydedileceğine dair bir örnek için ise customizeAgpDsl tarifine bakın.
Kullanım alanınız AndroidComponents API'lerinden herhangi biri tarafından kapsanmıyorsa hata bildiriminde bulunabilirsiniz.
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 en çok tercih edilen birkaç eklenti bu yeni API'leri kullanmaya başladı. AGP Yükseltme Asistanı, proje geliştiricilerin en çok tercih edilen eklentileri gerektiğinde yükseltmesine de yardımcı olur.
Transform API'yi üçüncü taraf bir eklenti aracılığıyla kullanıyorsanız eklentinin AGP 8.0 için yeni API'lerle çalışacak şekilde güncellenmesi gerektiğini yazara bildirebilirsiniz.
AGP 7.2
Aşağıda, AGP 7.2 için önemli API güncellemeleri verilmiştir.
RenderScript'in desteği sonlandırıldı
AGP 7.2'den itibaren RenderScript API'leri kullanımdan kaldırılmıştır. Bu API'ler çalışmaya devam edecek ancak uyarılar verecek ve AGP'nin gelecekteki sürümlerinde tamamen kaldırılacak. RenderScript'ten geçiş yapma hakkında bilgi edinmek için RenderScript'ten taşıma başlıklı makaleyi inceleyin.
Component.transformClassesWith ve Component.setAsmFramesComputationMode kullanımdan kaldırıldı
AGP 7.2'den itibaren sınıf bayt kodu araç API'leri Component.transformClassesWith ve Component.setAsmFramesComputationMode kullanımdan kaldırılmıştır. Bu API'ler, ölçümleme sürecini yapılandırmayla ilgili tüm API'leri içeren yeni bir bloğa (Component.instrumentation) taşındı. Bu araç ö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
)
})
}