Android Gradle eklentisi 9.0, API ve davranış değişiklikleri içeren önemli bir sürümdür.
Android Gradle eklentisi 9.0.0'a güncellemek için Android Gradle eklentisi Yükseltme Yardımcısı'nı kullanın.
AGP Upgrade Assistant, projenizi yükseltirken uygun olduğunda mevcut davranışları korumanıza yardımcı olur. Bu sayede, AGP 9.0'daki tüm yeni varsayılanları kullanmaya hazır olmasanız bile projenizi AGP 9.0'ı kullanacak şekilde yükseltebilirsiniz.
Uyumluluk
Android Gradle eklentisi 9.0'ın desteklediği maksimum API düzeyi 36'dır. Diğer uyumluluk bilgileri:
| Minimum sürüm | Varsayılan sürüm | Notlar | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.0 | Daha fazla bilgi edinmek için Gradle'ı güncelleme bölümünü inceleyin. |
| SDK Derleme Araçları | 36.0.0 | 36.0.0 | SDK Derleme Araçları'nı yükleyin veya yapılandırın. |
| NDK | Yok | 28.2.13676358 | NDK'nın farklı bir sürümünü yükleyin veya yapılandırın. |
| JDK | 17 | 17 | Daha fazla bilgi için JDK sürümünü ayarlama konusuna bakın. |
android DSL sınıfları artık yalnızca yeni herkese açık arayüzleri uyguluyor
Son birkaç yıldır, hangi API'lerin herkese açık olduğunu daha iyi kontrol etmek için DSL ve API'miz için yeni arayüzler kullanıma sunduk. AGP'nin 7.x ve 8.x sürümlerinde, arayüzler üzerinde çalışmalar devam ederken uyumluluğu korumak için yeni herkese açık arayüzleri de uygulayan eski DSL türleri (örneğin BaseExtension) kullanılmaya devam edildi.
AGP 9.0 yalnızca yeni DSL arayüzlerimizi kullanır ve uygulamalar tamamen gizlenmiş yeni türlere dönüştürülmüştür. Bu işlem, eski ve kullanımdan kaldırılmış varyant API'sine erişimi de kaldırır.
AGP 9.0'a güncellemek için aşağıdakileri yapmanız gerekebilir:
- Projenizin yerleşik
Kotlin ile uyumlu olduğundan emin olun:
org.jetbrains.kotlin.androideklentisi yeni DSL ile uyumlu değildir. KMP projelerini KMP için Android Gradle kitaplık eklentisine geçirme:
org.jetbrains.kotlin.multiplatformeklentisinincom.android.libraryvecom.android.applicationeklentileriyle aynı Gradle alt projesinde kullanılması yeni DSL ile uyumlu değildir.Derleme dosyalarınızı güncelleyin: Arayüzlerin değiştirilmesi, DSL'nin mümkün olduğunca benzer kalmasını sağlamayı amaçlasa da bazı küçük değişiklikler olabilir.
Özel derleme mantığınızı yeni DSL ve API'ye referans verecek şekilde güncelleyin: Dahili DSL'ye yapılan tüm referansları herkese açık DSL arayüzleriyle değiştirin. Çoğu durumda bu, bire bir değiştirme olacaktır.
applicationVariantsve benzeri API'lerin tüm kullanımlarını yeniandroidComponentsAPI ile değiştirin.androidComponentsAPI, eklentilerin daha uzun süre uyumlu kalması için daha kararlı olacak şekilde tasarlandığından bu işlem daha karmaşık olabilir. Örnekler için Gradle Tarifleri'ne göz atın.Üçüncü taraf eklentilerini güncelleyin: Bazı üçüncü taraf eklentileri, artık kullanılmayan arayüzlere veya API'lere bağlı olabilir. Bu eklentilerin AGP 9.0 ile uyumlu sürümlerine geçin.
Yeni DSL arayüzlerine geçiş, aşağıdakiler de dahil olmak üzere çeşitli kullanımdan kaldırılmış API'leri kullanan eklentilerin ve Gradle derleme komut dosyalarının çalışmasını engeller:
android bloğunda kullanımdan kaldırılmış API |
İşlev | Değiştirme |
|---|---|---|
applicationVariants,libraryVariants,testVariants veunitTestVariants
|
Eklentilerin AGP'ye yeni işlevler eklemesi için uzantı noktaları. |
Bunu androidComponents.onVariants API ile değiştirin. Örneğin:
androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
Seçilen varyantların devre dışı bırakılmasına olanak tanır. |
Bunu androidComponents.beforeVariants API ile değiştirin. Örneğin:
androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider vetestServer
|
Android cihazlar ve emülatörlerde test çalıştırmak için özel test ortamlarının kaydı. | Gradle tarafından yönetilen cihazlara geçin. |
sdkDirectory,ndkDirectory,bootClasspath,adbExecutable veadbExe
|
Özel görevler için Android SDK'nın çeşitli bileşenlerini kullanma. |
androidComponents.sdkComponents planına geçin.
|
registerArtifactType,registerBuildTypeSourceProvider,registerProductFlavorSourceProvider,registerJavaArtifact,registerMultiFlavorSourceProvider vewrapJavaSourceSet |
Çoğunlukla Android Studio'da oluşturulan kaynakların işlenmesiyle ilgili olan ve AGP 7.2.0'da çalışmayı durduran işlevler. | Bu API'lerin doğrudan bir alternatifi yoktur. |
dexOptions
|
d8 ile değiştirilen dx aracıyla ilgili eski ayarlar. Android Gradle eklentisi 7.0'dan beri bu ayarların hiçbir etkisi olmamıştır.
|
Doğrudan bir alternatifi yoktur. |
generatePureSplits
|
Hazır uygulamalar için yapılandırma bölmeleri oluşturun. | Yapılandırma bölmelerini gönderme özelliği artık Android uygulama paketlerine yerleştirilmiştir. |
aidlPackagedList
|
Kitaplıklar ve bu kitaplığa bağlı uygulamalar için API olarak kullanıma sunmak üzere AAR'ye paketlenecek AIDL dosyaları. |
Bu, LibraryExtension'da hâlâ kullanıma sunulmaktadır ancak diğer uzantı türlerinde kullanıma sunulmamaktadır.
|
AGP 9.0'a güncelleyip aşağıdaki hata mesajını görürseniz projeniz hâlâ eski türlerden bazılarına referans veriyor demektir:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
Uyumsuz üçüncü taraf eklentileri tarafından engelleniyorsanız DSL için eski uygulamaları ve eski varyant API'sini geri almak üzere devre dışı bırakabilirsiniz.
Bu işlem sırasında yeni arayüzler de kullanılabilir ve kendi derleme mantığınızı yeni API'ye güncelleyebilirsiniz. Bu özelliği devre dışı bırakmak için gradle.properties dosyanıza şu satırı ekleyin:
android.newDsl=false
AGP 9.0'a yükseltmeden önce yeni API'lere yükseltmeye de başlayabilirsiniz. Yeni arayüzler birçok AGP sürümünde mevcuttur. Bu nedenle, yeni ve eski arayüzleri birlikte kullanabilirsiniz. AGP API referans belgelerinde, her AGP sürümünün API yüzeyi ve her sınıf, yöntem ve alanın ne zaman eklendiği gösterilir.
9.0 alfa aşamasında, eklenti yazarlarına yeni modlarla tamamen uyumlu eklentiler uyarlamalarına ve yayınlamalarına yardımcı olmak için ulaşıyoruz. Ayrıca, Android Studio'daki AGP Yükseltme Yardımcısı'nı geliştirerek taşıma sürecinde size yol göstereceğiz.
Yeni DSL veya Variant API'de eksik özellikler olduğunu fark ederseniz lütfen en kısa sürede bir sorun kaydı oluşturun.
Yerleşik Kotlin
Android Gradle eklentisi 9.0, yerleşik Kotlin desteği sunar ve bu desteği varsayılan olarak etkinleştirir. Bu nedenle, Kotlin kaynak dosyalarını derlemek için artık derleme dosyalarınızda org.jetbrains.kotlin.android (veya kotlin-android) eklentisini uygulamanız gerekmez.
Bu, Kotlin'in AGP ile entegrasyonunu basitleştirir, kullanımdan kaldırılan API'lerin kullanılmasını önler ve bazı durumlarda performansı artırır.
Bu nedenle, projenizi AGP 9.0'a yükselttiğinizde yerleşik Kotlin'e geçmeniz veya bu özelliği devre dışı bırakmanız gerekir.
Ayrıca, Kotlin kaynakları olmayan Gradle alt projeleri için yerleşik Kotlin desteğini seçerek devre dışı bırakabilirsiniz.
Kotlin Gradle eklentisine çalışma zamanı bağımlılığı
Android Gradle eklentisi 9.0, yerleşik Kotlin desteği sağlamak için artık Kotlin Gradle eklentisi (KGP) 2.2.10'a çalışma zamanı bağımlılığına sahiptir. Bu nedenle artık KGP sürümü bildirmeniz gerekmez. 2.2.10'dan eski bir KGP sürümü kullanıyorsanız Gradle, KGP sürümünüzü otomatik olarak 2.2.10'a yükseltir. Benzer şekilde, 2.2.10-2.0.2'den eski bir KSP sürümü kullanıyorsanız AGP, KGP sürümüyle eşleşmesi için bu sürümü 2.2.10-2.0.2'ye yükseltir.
Daha yeni bir KGP sürümüne yükseltme
KGP veya KSP'nin daha yüksek bir sürümünü kullanmak için üst düzey derleme dosyanıza aşağıdakileri ekleyin:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
Daha eski bir KGP sürümüne geçme
KGP sürümünü yalnızca yerleşik Kotlin'i devre dışı bıraktıysanız düşürebilirsiniz. Bunun nedeni, AGP 9.0'da yerleşik Kotlin'in varsayılan olarak etkinleştirilmesi ve yerleşik Kotlin'in KGP 2.2.10 veya sonraki sürümleri gerektirmesidir.
KGP veya KSP'nin daha eski bir sürümünü kullanmak için bu sürümü üst düzey derleme dosyanızda katı sürüm bildirimiyle beyan edin:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
Düşürebileceğiniz minimum KGP sürümünün 2.0.0 olduğunu unutmayın.
Test armatürleri için IDE desteği
AGP 9.0, test armatürleri için tam Android Studio IDE desteği sunar.
Fused Library Plugin
Fused Library Plugin (Önizleme), birden fazla kitaplığı tek bir Android kitaplığı AAR olarak yayınlamanıza olanak tanır. Bu sayede kullanıcılarınız yayınladığınız yapay nesnelere daha kolay güvenebilir.
Başlangıç hakkında bilgi için Fused Library ile birden fazla Android kitaplığını tek bir kitaplık olarak yayınlama başlıklı makaleye bakın.
Davranış değişiklikleri
Android Gradle eklentisi 9.0'da aşağıdaki yeni davranışlar bulunur:
| Davranış | Öneri |
|---|---|
Android Gradle eklentisi 9.0, varsayılan olarak NDK'nın r28c sürümünü kullanır.
|
Kullanmak istediğiniz NDK sürümünü açıkça belirtmeyi düşünebilirsiniz. |
| Android Gradle eklentisi 9.0, varsayılan olarak bir kitaplığın tüketicilerinin aynı veya daha yüksek bir derleme SDK'sı sürümü kullanmasını gerektirir. |
Kitaplık kullanırken aynı veya daha yüksek derleme SDK'sını kullanın.
Bu mümkün değilse veya yayınladığınız bir kitaplığın tüketicilerine geçiş için daha fazla zaman vermek istiyorsanız AarMetadata.minCompileSdk'ı açıkça ayarlayın.
|
AGP 9.0, aşağıdaki Gradle özelliklerinin varsayılan değerleriyle ilgili güncellemeler içerir. Bu sayede, yükseltme yaparken AGP 8.13 davranışını koruma seçeneğine sahip olursunuz:
| Özellik | İşlev | AGP 8.13'ten AGP 9.0'a geçiş | Öneri |
|---|---|---|---|
android. |
android bloğunun eski uygulamalarını kullanıma sunmadan yeni DSL arayüzlerini kullanın.Bu, android.applicationVariants
gibi eski varyant API'lerine de artık erişilemeyeceği anlamına gelir.
|
false → true |
android.newDsl=false olarak ayarlayarak bu özelliği devre dışı bırakabilirsiniz.Projenizin kullandığı tüm eklentiler ve derleme mantığı uyumlu olduğunda, devre dışı bırakma işlemini kaldırın. |
android. |
Yerleşik Kotlin'i etkinleştirir. | false → true |
Mümkünse yerleşik Kotlin'e geçin veya özelliği devre dışı bırakın. |
android. |
Her kitaplığın farklı bir paket adı olmasını zorunlu kılar. | false → true |
Projenizdeki tüm kitaplıklar için benzersiz paket adları belirtin. Bu mümkün değilse taşıma işlemi sırasında bu işareti devre dışı bırakabilirsiniz. |
android. |
Varsayılan olarak androidx
bağımlılıklarını kullanın.
|
false → true |
androidx bağımlılıklarını benimseyin.
|
android. |
Varsayılan olarak androidx.test.runner.AndroidJUnitRunner sınıfıyla cihaz üzerinde testler çalıştırın. Bu sınıf, kullanımdan kaldırılan InstrumentationTestRunner sınıfının varsayılan değerini değiştirir.
android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
Kullanın
AndroidJUnitRunner,
veya özel testInstrumentationRunner öğenizi açıkça belirtin.
|
android. |
Yapılandırmalar arasındaki bağımlılık kısıtlamalarının kullanımını kontrol eder. AGP 9.0'daki varsayılan değer false'dır. Bu değer yalnızca uygulama cihazı testlerinde (AndroidTest) kısıtlamaları kullanır.
Bu ayarı true olarak ayarladığınızda 8.13 sürümündeki davranışa geri dönülür.
|
true → false |
Gerekmedikçe her yerde bağımlılık kısıtlamaları kullanmayın. Bu işaretin yeni varsayılanını kabul etmek, proje içe aktarma sürecinde optimizasyonları da etkinleştirir. Bu optimizasyonlar, çok sayıda Android kitaplığı alt projesi içeren derlemelerin içe aktarma süresini kısaltır. |
android. |
Uygulamalardaki kodu nihai olmayan bir R sınıfına göre derleyerek uygulama derlemesini kitaplık derlemesiyle uyumlu hale getirin. Bu, artımlılığı iyileştirir ve kaynak işleme akışında gelecekteki performans optimizasyonlarının önünü açar. |
false → true |
Birçok proje, kaynakta değişiklik yapmadan yeni davranışı benimseyebilir. R sınıfı alanları, sabit gerektiren herhangi bir yerde (ör. switch ifadeleri) kullanılıyorsa zincirleme if ifadeleri kullanmak için yeniden düzenleyin. |
android. |
Uygulamalarda ve testlerde hedef SDK sürümü için varsayılan değer olarak derleme SDK sürümünü kullanır. Bu değişiklikten önce hedef SDK sürümü varsayılan olarak minimum SDK sürümü olurdu. |
false → true |
Uygulamalar ve testler için hedef SDK sürümünü açıkça belirtin. |
android. |
Yalnızca test edilen derleme türü için birim testi bileşenleri oluşturur. Varsayılan projede bu, hata ayıklama için tek bir birim testiyle sonuçlanır. Önceki davranış, birim testlerinin hata ayıklama veya yayınlama için çalıştırılmasıydı. |
false → true |
Projenizde hem hata ayıklama hem de yayın için testlerin çalıştırılması gerekmiyorsa herhangi bir değişiklik yapmanız gerekmez. |
android. |
AGP DSL'de belirtilen saklanacak dosyalardan herhangi biri diskte yoksa derleme işlemi hatayla sonuçlanır. Bu değişiklikten önce, dosya adlarındaki yazım hataları dosyaların sessizce yoksayılmasına neden oluyordu. | false → true |
Geçersiz ProGuard dosyası bildirimlerini kaldırın. |
android. |
R8'in sınıfları ve Android kaynaklarını birlikte değerlendirerek daha az Android kaynağını korumasına olanak tanır. | false → true |
Projenizin saklama kuralları zaten tamamlanmışsa herhangi bir değişiklik yapmanız gerekmez. |
android. |
Bir sınıf korunurken varsayılan oluşturucuyu örtülü olarak korumayarak R8'in daha az şey korumasına olanak tanır.
Yani, -keep class A artık -keep class A { <init>(); }anlamına gelmiyor. |
false → true |
Projenizin saklama kuralları zaten tamamlanmışsa herhangi bir değişiklik yapmanız gerekmez.
Varsayılan oluşturucunun korunması gereken durumlarda projenizin saklama kurallarında -keep class A
yerine
-keep class A { <init>(); }
kullanın.
|
android. |
Tüm alt projelerde
resValues
özelliğini etkinleştirir.
|
true → false |
Yalnızca ihtiyaç duyan alt projelerde resValues'ı etkinleştirin.
Bunu yapmak için bu projelerin Gradle derleme dosyalarında aşağıdakileri ayarlayın:
android {
buildFeatures {
resValues = true
}
} |
android. |
Tüm alt projelerde gölgelendirici derlemeyi etkinleştirir. | true → false |
Yalnızca derlenecek gölgelendiriciler içeren alt projelerde gölgelendirici derlemesini etkinleştirmek için bu projelerin Gradle derleme dosyalarında aşağıdakileri ayarlayın:
android {
buildFeatures {
shaders = true
}
} |
android. |
AGP 9.0'da getDefaultProguardFile(), proguard-android.txt yerine yalnızca proguard-android-optimize.txt'yi destekleyecektir. Bu, proguard-android.txt içinde yer alan dontoptimize işaretinin yanlışlıkla kullanılmasını önlemek içindir.
|
false → true |
Optimizasyonu önlemek istiyorsanız proguard-android-optimize.txt kullanmanın yanı sıra özel bir proguardFile'da dontoptimize değerini açıkça belirtebilirsiniz. Mümkünse bu dosyadan dontoptimize işaretini kaldırın. Bu işaret, R8 optimizasyonunun avantajlarını azaltır. Aksi takdirde android.r8.globalOptionsInConsumerRules.disallowed=false ayarını yaparak kapsam dışında kalabilirsiniz.
|
android. |
AGP 9.0'dan itibaren, tüketici koruma dosyaları sorunlu Proguard yapılandırmaları içeriyorsa Android kitaplığı ve özellik modülü yayınlama işlemi başarısız olur. dontoptimize veya dontobfuscate gibi genel seçenekleri içeren tüketici tutma dosyaları yalnızca uygulama modüllerinde kullanılmalı ve kitaplık kullanıcıları için optimizasyon avantajlarını azaltabilir. Android uygulama modülü derlemesi, önceden derlenmiş bir bağımlılığa (JAR veya AAR) yerleştirilmişse bu tür genel seçenekleri sessizce yoksayar. Bu durumun ne zaman gerçekleştiğini, configuration.txt dosyasında (genellikle <app_module>/build/outputs/mapping/<build_variant>/configuration.txt gibi bir yolda) şu tür yorumları kontrol ederek görebilirsiniz: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
Yayınlanan kitaplıklar, uyumsuz kuralları kaldırmalıdır. Dahili kitaplıklar, uyumsuz ancak gerekli kuralları bunun yerine bir uygulama modülündeki proguardFile'a taşımalıdır. android.r8.globalOptionsInConsumerRules.disallowed=false ayarını yaparak devre dışı bırakabilirsiniz. Tüm tüketici saklama dosyalarınız uyumlu hale geldiğinde devre dışı bırakma işlemini kaldırın.
|
android. |
AndroidSourceSet DSL'sini kullanarak oluşturulan kaynaklar için sağlayıcıların iletilmesine izin vermeyin.
|
false → true |
Oluşturulan kaynakları kaydetmek için androidComponents üzerinde Sources API'sini kullanın.
|
android. |
Gölgelendirici derleme etkinse local.properties içinde gölgelendirici derleyici yolunun açıkça ayarlanması gerekir.
|
false → true |
Projenizin local.properties bölümüne glslc.dir=/path/to/shader-tools ekleyin.
|
Kaldırılan özellikler
Android Gradle eklentisi 9.0, aşağıdaki işlevleri kaldırır:
- Yerleştirilmiş Wear OS uygulaması desteği
AGP 9.0, Wear OS uygulamalarının yerleştirilmesiyle ilgili desteği kaldırıyor. Bu özellik artık Play'de desteklenmiyor. Bu kapsamda,wearAppyapılandırmaları veAndroidSourceSet.wearAppConfigurationNameDSL'nin kaldırılması da yer alır. Uygulamanızı Wear OS'te yayınlama hakkında bilgi edinmek için Wear OS'e dağıtma başlıklı makaleyi inceleyin. androidDependenciesvesourceSetsrapor görevleri- Yoğunluğa göre bölünmüş APK desteği
AGP 9.0, ekran yoğunluğuna göre bölünmüş APK oluşturma desteğini kaldırıyor. İşlev ve ilgili API'ler kaldırıldı. AGP 9.0 veya sonraki sürümlerini kullanarak APK'ları ekran yoğunluğuna göre bölmek için uygulama paketlerini kullanın.
Değiştirilen DSL
Android Gradle eklentisi 9.0'da aşağıdaki DSL değişiklikleri yapıldı:
CommonExtensionparametrelendirmesi kaldırıldı.Bu değişiklik, gelecekte kaynak düzeyinde uyumluluğu bozacak değişikliklerin önlenmesine yardımcı olmak için yalnızca kaynak düzeyinde uyumluluğu bozacak bir değişikliktir. Ancak bu değişiklik, blok yöntemlerinin
CommonExtension'denApplicationExtension,LibraryExtension,DynamicFeatureExtensionveTestExtension'ye taşınması gerektiği anlamına da gelir.Projenizi AGP 9.0'a yükseltirken bu parametreleri veya blok yöntemlerini kullanan Gradle eklenti kodunu yeniden düzenleyin. Örneğin, aşağıdaki eklenti, tür parametresini kaldıracak ve kaldırılan blok yöntemlerine dayanmayacak şekilde güncellenir:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }Bir dizi AGP sürümünü hedefleyen eklentilerde, getter'ı doğrudan kullanmak 9.0'dan önceki AGP sürümleriyle ikili uyumludur.
Kaldırılan DSL
Android Gradle eklentisi 9.0'da kaldırılanlar:
AndroidSourceSet.jni, çünkü işlevsel değildi.AndroidSourceSet.wearAppConfigurationName, kaldırılan yerleşik Wear OS uygulama desteğiyle ilgili olarak.BuildType.isRenderscriptDebuggable, çünkü işlevsel değildi.DependencyVariantSelection. YeriniDependencySelectionaldı.kotlin.android.localDependencySelectionolarak kullanıma sunulur.Installation.installOptions(String). Bu özellik,Installation.installOptionsöğesinin değiştirilebilir özelliğiyle değiştirildi.Deneyseldir ancak asla sabitlenmez
PostProcessingbloğu.ProductFlavor.setDimension,dimensionözelliğiyle değiştirilir.LanguageSplitOptions, yalnızca kullanımdan kaldırılan Google Play Instant için yararlıydı.DensitySplit, çünkü özellik artık desteklenmiyor. Yerine App Bundle kullanılacaktır.
Kaldırılan API'ler
Android Gradle eklentisi 9.0'da kaldırılanlar:
AndroidComponentsExtension.finalizeDSl. Bu işlevin yerinifinalizeDslaldı.Component.transformClassesWith. Bu işlevin yeriniInstrumentation.transformClassesWithaldı.Component.setAsmFramesComputationMode. Bu işlevin yeriniInstrumentation.setAsmFramesComputationModealdı.ComponentBuilder.enabled. Bu işlevin yeriniComponentBuilder.enablealdı.DependenciesInfoBuilder.includedInApk. Bu,includeInApkile değiştirildi.DependenciesInfoBuilder.includedInBundle. Bu,includeInBundleile değiştirildi.GeneratesApk.targetSdkVersion.targetSdkile değiştirildi.Variant.minSdkVersion.minSdkile değiştirildi.Variant.maxSdkVersion.maxSdkile değiştirildi.Variant.targetSdkVersion.targetSdkile değiştirildi.Variant.unitTest,com.android.testeklentisi için geçerli olmadığından.unitTest,VariantBuilderalt türlerindeHasUnitTestiçin kullanılabilir.Kitaplıklarda anlamlı olmadıkları için
VariantBuilder.targetSdkvetargetSdkPreview. Bunun yerineGeneratesApkBuilder.targetSdkveyaGeneratesApkBuilder.targetSdkPreviewkullanın.VariantBuilder.enableUnitTest,com.android.testeklentisi için geçerli olmadığından.enableUnitTest,VariantBuilderalt türlerindeHasUnitTestBuilderiçin kullanılabilir.VariantBuilder.unitTestEnabled,HasUnitTestBuilderöğesini genişletenVariantBuilderalt türlerinde daha tutarlı bir şekilde adlandırılanenableUnitTestlehine kaldırıldı.VariantOutput.enable.enabledile değiştirildi.Kullanımdan kaldırılan ve devre dışı bırakılan
FeaturePluginveFeatureExtension.Yalnızca AGP 4.2 veya daha eski sürümlerde çalışmayı hedeflerken en yeni AGP sürümüne göre derlemeye izin vermek için kalan, kullanımdan kaldırılmış ve devre dışı bırakılmış
BaseExtension.registerTransformAPI'ler.
Kaldırılan Gradle özellikleri
Aşağıdaki Gradle özellikleri, başlangıçta varsayılan olarak etkinleştirilen özellikleri genel olarak devre dışı bırakmanın yolları olarak eklenmişti.
Bu özellikler, AGP 8.0 veya daha eski sürümlerde varsayılan olarak devre dışı bırakılmıştır. Daha verimli bir derleme için bu özellikleri yalnızca bunları kullanan alt projelerde etkinleştirin.
| Özellik | İşlev | Değiştirme |
|---|---|---|
android. |
Tüm alt projelerde AIDL derlemesini etkinleştirir. |
Yalnızca AIDL kaynaklarının bulunduğu alt projelerde AIDL derlemesini etkinleştirmek için
bu projelerin Gradle derleme dosyalarında aşağıdaki özelliği ayarlayın:
android {
buildFeatures {
aidl = true
}
} |
android. |
Tüm alt projelerde RenderScript derlemesini etkinleştirir. |
Yalnızca renderscript kaynaklarının bulunduğu alt projelerde renderscript derlemesini etkinleştirmek için bu projelerin Gradle derleme dosyalarında aşağıdaki özelliği ayarlayın:
android {
buildFeatures {
renderScript = true
}
} |
Zorunlu kılınan Gradle özellikleri
AGP 9.0, aşağıdaki Gradle özelliklerini ayarlarsanız hata verir.
Android Gradle eklentisi Yükseltme Asistanı, bu özellikleri kullanan projeleri AGP 9.0'a yükseltmez.
| Özellik | İşlev |
|---|---|
android. |
Kaynak küçültme artık her zaman R8'in bir parçası olarak çalıştırılıyor. Önceki uygulama kaldırıldı. |
android. |
Kaynak küçültme artık her zaman hassas kaynak küçültme kullanıyor. Bu sayede daha fazla kaynak kaldırılabiliyor. |
R8 değişiklikleri
Aşağıdaki R8 değişiklikleri AGP 9.0.0'a dahil edilmiştir.
Yeni yapılandırma seçeneği -processkotlinnullchecks
Kotlin null denetimlerinin işlenmesi için R8'i yapılandırmak üzere yeni R8 seçeneği -processkotlinnullchecks eklendi. Seçenek, zorunlu bir bağımsız değişken alır ve bu bağımsız değişken şu üç değerden biri olmalıdır: keep, remove_message ve remove.
Bu seçenek, Kotlin derleyicisi tarafından eklenen aşağıdaki boşluk kontrollerini işler:
class kotlin.jvm.internal.Intrinsics {
void checkNotNull(java.lang.Object);
void checkNotNull(java.lang.Object, java.lang.String);
void checkExpressionValueIsNotNull(
java.lang.Object, java.lang.String);
void checkNotNullExpressionValue(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkFieldIsNotNull(java.lang.Object, java.lang.String);
void checkFieldIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkParameterIsNotNull(java.lang.Object, java.lang.String);
void checkNotNullParameter(java.lang.Object, java.lang.String);
}
En zayıftan en güçlüye doğru sıralanan seçenek değerleri aşağıdaki etkiye sahiptir:
keepkontrolleri değiştirmez.remove_message, her kontrol yöntemi çağrısını, çağrının ilk bağımsız değişkenindegetClass()çağrısı olarak yeniden yazar (böylece null kontrolü mesaj olmadan etkili bir şekilde korunur).remove, kontrolleri tamamen kaldırır.
R8 varsayılan olarak remove_message kullanır. -processkotlinnullchecks ile ilgili tüm tanımlamalar bunu geçersiz kılar. Birden fazla kez belirtilirse en güçlü değer kullanılır.
Saklama bilgilerinin tamamlayıcı yöntemlere yayılmasını durdurma
Keep kuralları, desugaring işlemine tabi olan arayüz yöntemleriyle eşleştiğinde R8, disallow optimization ve disallow shrinking bitlerini daha önce dahili olarak sentezlenmiş yardımcı yöntemlere aktarıyordu.
AGP 9.0'dan itibaren, saklama kuralları artık yardımcı yöntemler için geçerli değildir. Bu, saklama kurallarının derleyici tarafından sentezlenen diğer alanlar/yöntemler/sınıflar için geçerli olmamasıyla tutarlıdır.
Optimizasyona izin verme ve küçültmeye izin verme bitleri yardımcı yöntemlere aktarıldığından daha önce aşağıdaki kullanım alanı destekleniyordu:
default/static/privatearayüz yöntemleriyle bir kitaplık derleyin. Bu kitaplık,minSdk< 24 olan DEX'e ve arayüz yöntemlerini koruyan kurallara sahip olmalıdır.- Sınıf yolunda kitaplık ve
-applymappingile bir uygulama derleyin. - Uygulamayı ve kitaplığı birleştirin.
disallow
obfuscation biti tamamlayıcı yöntemlere aktarılmadığından bu işlevin yalnızca -applymapping ile çalıştığını unutmayın. Yani 1. adımda oluşturulan tamamlayıcı sınıflarda karartılmış yöntem adları bulunur.
Bu kullanım alanı, minSdk <
24 sürümünden itibaren artık desteklenmeyecek. Geçici çözüm olarak aşağıdakileri yapabilirsiniz:
default/static/privatearayüz yöntemleriyle kitaplığı,minSdk< 24 olan sınıf dosyalarına dönüştürün.- R8'i ve arayüz yöntemlerini yardımcı sınıflarda tutan kuralları kullanarak şekersiz hale getirilmiş yapıyı derleyin.
- Uygulamayı, sınıf yolundaki kitaplıkla derleyin.
- Uygulamayı ve desugared yapıyı birleştirin.
Bunun bir diğer yan etkisi de anonim ve yerel sınıflar için iç sınıf ve kapsayan yöntem özelliklerinin artık arayüz eşlikçi yöntemlerinde tutulamamasıdır.
Varsayılan olarak yayınlanan kaynak dosyanın r8-map-id-<MAP_ID> olarak değiştirilmesi
Bu değişiklik, 8.12.0 sürümünden itibaren AGP'de yer almaktadır.
Bir sınıf için varsayılan olarak verilen kaynak dosya özelliği, izleme geri alma işlemi gerektiğinde (yani karartma veya optimizasyon etkinleştirildiğinde) SourceFile olarak değişir.r8-map-id-<MAP_ID>
Yeni kaynak dosyası özelliği, karartılmış bir yığın izi verildiğinde yeniden izleme için gereken eşleme dosyasının kimliğini ayıklamayı mümkün kılar. Bu kimlik, Logcat'teki yığın izlerinin otomatik olarak yeniden izlenmesini desteklemek için kullanılabilir.
Özel bir kaynak dosyası özelliği kullanılıyorsa (-renamesourcefileattribute) bu özel kaynak dosyası özelliği öncelikli olmaya devam eder.
ProGuard uyumluluk modunda (gradle.properties, android.enableR8.fullMode=false içerdiğinde), r8-map-id-<MAP_ID> kaynak dosyası özelliğinin yayınlanması yalnızca SourceFile özelliği korunmadığında geçerli olur. ProGuard uyumluluk modunu kullanan ve eşleme dosyası kimliğini yığın izlerine eklemek isteyen uygulamalar -keepattributes SourceFile öğesini kaldırmalıdır (veya R8 tam moduna geçmelidir).
r8-map-id-<MAP_ID> içinde kullanılan harita kimliği, daha önce kullanılan harita karmasının 7 karakterlik öneki değil, tam harita karmasıdır.
L8 desugaring'de küçültülmüş sentetik adların kullanımını etkinleştirme
D8 tarafından oluşturulan yapay sınıfların adı genellikle, bunun D8 tarafından oluşturulan yapay bir sınıf olduğunu belirten $$ExternalSynthetic alt dizesini içerir.
Ayrıca, sentetiklerin adı da sentetik türünü (örneğin, Backport, Lambda) kodlar. Bu durum, sınıf adları dize havuzunda daha fazla yer kapladığından ortaya çıkan DEX boyutunu olumsuz etkiler.
AGP 9.0, L8'i (çekirdek kitaplık desugaring) tüm j$ sınıflarını içeren DEX dosyasının, sentetik sınıflar için yeni bir kısaltılmış sınıf adı biçimi kullanacak şekilde yapılandırır. Yeni sınıf adı sayısal bir kimlik kullanıyor (örneğin, $1).
-addconfigurationdebugging için desteği kaldırma
AGP 9.0, -addconfigurationdebugging desteğini kaldırıyor. Derleyici artık işaret kullanıldığında uyarı bildiriyor.
D8/R8'den L8 kuralları oluşturma desteği kaldırıldı
Bu değişiklik yalnızca D8/R8 komut satırını veya API'leri doğrudan kullanan geliştiriciler için geçerlidir.
R8 9.0, D8 ve R8'den L8 için saklama kuralları oluşturma desteğini kaldırır.
Bunun yerine TraceReferences kullanmalısınız.
Daha spesifik olarak, D8Command.builder.setDesugaredLibraryKeepRuleConsumer ve R8Command.Builder.setDesugaredLibraryKeepRuleConsumer yöntemleri kaldırıldı ve --desugared-lib-pg-conf-output desteği, D8 ve R8'in komut satırı seçeneklerinden kaldırıldı.
Çözülen sorunlar
Android Gradle eklentisi 9.0.0-rc03
| Çözülen Sorunlar | ||
|---|---|---|
| Android Gradle Eklentisi |
|
|
Android Gradle eklentisi 9.0.0-rc02
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0-rc02'de herkese açık sorunlar düzeltildi olarak işaretlenmedi |
Android Gradle eklentisi 9.0.0-rc01
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0-rc01'de herkese açık sorunlar düzeltildi olarak işaretlenmedi |
Android Gradle eklentisi 9.0.0-beta05
| Çözülen Sorunlar | ||
|---|---|---|
| Android Gradle Eklentisi |
|
|
Android Gradle eklentisi 9.0.0-beta04
| Çözülen Sorunlar | |||
|---|---|---|---|
| Android Gradle Eklentisi |
|
||
Android Gradle eklentisi 9.0.0-beta03
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0-beta03'te herkese açık sorunlar düzeltildi olarak işaretlenmedi |
Android Gradle eklentisi 9.0.0-beta02
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
| Hata analizi |
|
|||
| Hata Analizi Entegrasyonu |
|
|||
Android Gradle eklentisi 9.0.0-beta01
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0-beta01'de herkese açık sorunlar düzeltildi olarak işaretlenmedi |
Android Gradle eklentisi 9.0.0-alpha14
| Çözülen Sorunlar | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||||
| Hata Analizi Entegrasyonu |
|
||||||
| Shrinker (R8) |
|
||||||
Android Gradle eklentisi 9.0.0-alpha13
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
Android Gradle eklentisi 9.0.0-alpha12
| Çözülen Sorunlar | |||||
|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||
Android Gradle eklentisi 9.0.0-alpha11
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
Android Gradle eklentisi 9.0.0-alpha10
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
| Hata analizi |
|
|||
Android Gradle eklentisi 9.0.0-alpha09
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
Android Gradle eklentisi 9.0.0-alpha08
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0-alpha08'de herkese açık sorunlar düzeltildi olarak işaretlenmedi |
Android Gradle eklentisi 9.0.0-alpha07
| Çözülen Sorunlar | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||||||
Android Gradle eklentisi 9.0.0-alpha06
| Çözülen Sorunlar | |||||
|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||
| Hata analizi |
|
||||
Android Gradle eklentisi 9.0.0-alpha05
| Çözülen Sorunlar | |||||
|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||
| Hata analizi |
|
||||
Android Gradle eklentisi 9.0.0-alpha04
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
| Hata analizi |
|
|||
Android Gradle eklentisi 9.0.0-alpha03
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
| Hata analizi |
|
|||
Android Gradle eklentisi 9.0.0-alpha02
| Çözülen Sorunlar | ||||
|---|---|---|---|---|
| Android Gradle Eklentisi |
|
|||
Android Gradle eklentisi 9.0.0-alpha01
| Çözülen Sorunlar | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle Eklentisi |
|
||||||
Android Gradle eklentisi 9.0.0
| Çözülen Sorunlar | |
|---|---|
| AGP 9.0.0'da herkese açık sorunlar düzeltildi olarak işaretlenmedi |