Android Gradle eklentisi 9.0.1 (Ocak 2026)

Android Gradle eklentisi 9.0, API ve davranış değişiklikleri içeren önemli bir sürümdür.

Android Gradle eklentisi 9.0.1'e güncellemek için Android Gradle eklentisi Yükseltme Asistanı'nı kullanın. AGP Upgrade Assistant, projenizi yükseltirken mevcut davranışları korumanıza yardımcı olur. Böylece, AGP 9.0'daki tüm yeni varsayılanları kullanmaya hazır olmasanız bile projenizi AGP 9.0'ı kullanacak şekilde yükseltebilirsiniz.

Yükseltme sürecini kolaylaştırmak için kullanabileceğiniz iki temsilci becerisi de vardır. KMP olmayan bir uygulama için Android beceri deposundaki AGP 9 yükseltme becerisini deneyin. KMP uygulamaları için JetBrains'in AGP 9 yükseltme becerisini deneyin. Android Studio'da becerileri kullanma hakkında daha fazla bilgi için Temsilci Modu'nu becerilerle genişletme başlıklı makaleyi inceleyin.

Uyumluluk

Android Gradle eklentisi 9.0'ın desteklediği maksimum API düzeyi 36.1'dir. 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 edinmek için JDK sürümünü ayarlama bölümüne bakın.
Kotlin Gradle eklentisi (KGP) 2.2.10 2.2.10 Daha fazla bilgi edinmek için Kotlin Gradle eklentisine çalışma zamanı bağımlılığı başlıklı makaleyi inceleyin.

android DSL sınıfları artık yalnızca yeni herkese açık arayüzleri uygular.

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 7.x ve 8.x sürümleri, arayüzler üzerinde çalışmalar devam ederken uyumluluğu korumak için yeni herkese açık arayüzleri de uygulayan eski DSL türlerini (ör. BaseExtension) kullanmaya devam etti.

AGP 9.0 yalnızca yeni DSL arayüzlerimizi kullanır ve uygulamalar tamamen gizli olan yeni türlere değiştirilmiştir. Bu işlem, eski ve desteği sonlandırılmış değişken 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.android eklentisi yeni DSL ile uyumlu değil.
  • KMP projelerini KMP için Android Gradle Kitaplığı Eklentisi'ne geçirin: org.jetbrains.kotlin.multiplatform eklentisini com.android.library ve com.android.application eklentileriyle aynı Gradle alt projesinde kullanmak yeni DSL ile uyumlu değildir.

  • Derleme dosyalarınızı güncelleyin: Arayüzlerdeki değişiklik, DSL'yi mümkün olduğunca benzer tutmayı amaçlasa da bazı küçük değişiklikler olabilir.

  • Özel derleme mantığınızı yeni DSL ve API'yi referans alacak ş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şim olacaktır. applicationVariants ve benzer API'lerin tüm kullanımlarını yeni androidComponents API ile değiştirin. androidComponents API'si, 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 tariflerimize göz atın.

  • Üçüncü taraf eklentilerini güncelleme: Bazı üçüncü taraf eklentileri, artık kullanılamayan arayüzlere veya API'lere bağlı olabilir. Bu eklentilerin AGP 9.0 ile uyumlu sürümlerine geçiş yapın.

Yeni DSL arayüzlerine geçiş, eklentilerin ve Gradle derleme komut dosyalarının, aşağıdakiler de dahil olmak üzere çeşitli desteği sonlandırılmış API'leri kullanmasını engeller:

android bloğunda desteği sonlandırılmış API İşlev Değiştirme
applicationVariants,
libraryVariants,
testVariants ve
unitTestVariants
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)
    }
}
Önceki API'lerin tümünün doğrudan bir alternatifi olmayabilir. Yeni değişken API'lerinin kapsamadığı bir kullanım alanı varsa sorun bildirin.
variantFilter Seçilen varyantların devre dışı bırakılmasına olanak tanır. Bunu androidComponents.beforeVariants API'si ile değiştirin. Örneğin:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider ve
testServer
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 ve
adbExe
Özel görevler için Android SDK'nın çeşitli bileşenlerini kullanma androidComponents.sdkComponents'e geçin.
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider ve
wrapJavaSourceSet
Android Studio'da oluşturulan kaynakların işlenmesiyle ilgili olan ve AGP 7.2.0'da çalışmayı durduran eski 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çbirinin etkisi yoktur. Doğrudan bir alternatif yoktur.
generatePureSplits Hazır uygulamalar için yapılandırma bölmeleri oluşturma Yapılandırma bölmelerini gönderme özelliği artık Android App Bundle'lara yerleşik olarak eklenmiştir.
aidlPackagedList Bu kitaplığa bağlı kitaplıklar ve uygulamalar için API olarak sunmak üzere AAR'da paketlenecek AIDL dosyaları. Bu, LibraryExtension üzerinde gösterilmeye devam eder ancak diğer uzantı türlerinde gösterilmez.

AGP 9.0'a güncellediğinizde aşağıdaki hata mesajını görüyorsanız 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 nedeniyle engelleniyorsanız devre dışı bırakabilir ve DSL için eski uygulamaları ve eski varyant API'yi geri alabilirsiniz. Bu süreçte yeni arayüzler de kullanılabilir ve kendi derleme mantığınızı yeni API'ye güncelleyebilirsiniz. Kapsam dışında kalmak için gradle.properties dosyanıza şu satırı ekleyin:

android.newDsl=false

Alternatif olarak, daha kademeli bir geçiş için AGP 9.4, modülleri tek tek devre dışı bırakmanıza olanak tanır. Bunun nasıl yapılacağını öğrenmek için Variant API modülünün kapsamı dışında kalmayı seçme başlıklı makaleyi inceleyin.

Önceki sınıflar, AGP 9.0'da desteği sonlandırılmış olarak işaretlenir. Bu, newDsl işaretini devre dışı bırakan projelerin, android bloğunun kendisi de dahil olmak üzere desteğin sonlandırılmasıyla ilgili uyarılar göreceği anlamına gelir.

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 mevcut olduğundan yeni ve eski arayüzleri bir arada kullanabilirsiniz. AGP API referans belgeleri, her AGP sürümü için API yüzeyini ve her sınıfın, yöntemin ve alanın ne zaman eklendiğini gösterir.

En çok tercih edilen eklentilerin yazarlarıyla iletişime geçerek yeni modlarla tam uyumlu eklentiler uyarlamalarına ve yayınlamalarına yardımcı oluyoruz. Ayrıca, geçiş sürecinde size rehberlik etmesi için Android Studio'daki AGP Yükseltme Asistanı'nı geliştirmeye devam edeceğiz.

Yeni DSL veya Variant API'de eksik özellikler olduğunu fark ederseniz lütfen en kısa sürede sorun bildirin.

Yerleşik Kotlin

Android Gradle eklentisi 9.0, yerleşik Kotlin desteği sunar ve bu desteği varsayılan olarak etkinleştirir. Bu sayede, Kotlin kaynak dosyalarını derlemek için derleme dosyalarınıza org.jetbrains.kotlin.android (veya kotlin-android) eklentisini uygulamanız gerekmez. Bu sayede Kotlin'in AGP ile entegrasyonu basitleşir, desteği sonlandırılmış API'lerin kullanımı önlenir ve bazı durumlarda performans artar.

Bu nedenle, projenizi AGP 9.0'a yükselttiğinizde yerleşik Kotlin'e de geçmeniz veya bu özelliği devre dışı bırakmanız gerekir.

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, artık KGP sürümü beyan etmeniz gerekmediği anlamına gelir. 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 üst bir KGP sürümüne yükseltin

KGP veya KSP'nin daha yeni 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.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

Daha düşük 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 eski sürüme geçirebilirsiniz. Bunun nedeni, AGP 9.0'ın yerleşik Kotlin'i varsayılan olarak etkinleştirmesi ve yerleşik Kotlin'in KGP 2.2.10 veya sonraki bir sürümü gerektirmesidir.

KGP veya KSP'nin daha eski bir sürümünü kullanmak için katı sürüm beyanı kullanarak bu sürümü üst düzey derleme dosyanızda beyan edin:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

Sürümünü düşürebileceğiniz minimum KGP sürümünün 2.0.0 olduğunu unutmayın.

Test donanımları için IDE desteği

AGP 9.0, test donanımları için tam Android Studio IDE desteği sunar.

Fused Library Plugin

Fused Library eklentisi (ö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 yapıları daha kolay kullanabilir.

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ı makaleyi inceleyin.

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 r28c sürümünü kullanır. Kullanmak istediğiniz NDK sürümünü açıkça belirtmeniz önerilir.
Android Gradle eklentisi 9.0, varsayılan olarak bir kitaplığın tüketicilerinin aynı veya daha yüksek derleme SDK sürümünü kullanmasını gerektirir. Bir kitaplığı 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 kullanıcılarına geçiş için daha fazla zaman tanımak istiyorsanız AarMetadata.minCompileSdk değerini 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ğiniz olur:

Özellik İşlev AGP 8.13'ten AGP 9.0'a geçiş Öneri
android.newDsl android bloğunun eski uygulamalarını göstermeden yeni DSL arayüzlerini kullanın.
Bu, android.applicationVariants gibi eski varyant API'sine de artık erişilemeyeceği anlamına gelir.
false → true android.newDsl=false ayarını yaparak bu özelliği devre dışı bırakabilirsiniz.
Projenizin kullandığı tüm eklentiler ve derleme mantığı uyumlu hale geldikten sonra kapsam dışında kalma seçeneğini kaldırın.
android.builtInKotlin 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.uniquePackageNames 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.useAndroidx Varsayılan olarak androidx bağımlılıklarını kullanın. false → true androidx bağımlılıklarını benimseyin.
android.default.androidx.test.runner InstrumentationTestRunner için desteği sonlandırılan varsayılan androidx.test.runner.AndroidJUnitRunner sınıfını değiştirerek cihaz üzerinde testleri varsayılan olarak bu sınıfla çalıştırın.
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
false → true AndroidJUnitRunner'ı benimseyin veya özel testInstrumentationRunner değerinizi açıkça belirtin.
android.dependency.useConstraints Yapılandırmalar arasındaki bağımlılık kısıtlamalarının kullanımını kontrol eder.
AGP 9.0'da varsayılan değer false şeklindedir. Bu değer, yalnızca uygulama cihaz testlerinde (AndroidTest) kısıtlamaları kullanır. Bu ayar true olarak belirlenirse 8.13 davranışına geri dönülür.
true → false Bağımlılık kısıtlamalarını, ihtiyacınız olmadığı sürece her yerde kullanmayın. Bu işaretin yeni varsayılan değerini kabul ettiğinizde, proje içe aktarma sürecinde optimizasyonlar da etkinleştirilir. Bu optimizasyonlar, çok sayıda Android kitaplığı alt projesi içeren derlemelerin içe aktarma süresini kısaltır.
android.enableAppCompileTimeRClass Uygulamalardaki kodu, nihai olmayan bir R sınıfına göre derleyerek uygulama derlemesini kitaplık derlemesiyle uyumlu hale getirir.
Bu sayede artımlılık iyileştirilir ve kaynak işleme akışında gelecekte yapılacak performans optimizasyonlarının önü açılır.
false → true Birçok proje, kaynakta değişiklik yapmadan yeni davranışı benimseyebilir. R sınıfı alanları, switch-case gibi sabit değer gerektiren yerlerde kullanılıyorsa zincirleme if ifadelerini kullanacak şekilde yeniden düzenleyin.
android.sdk.defaultTargetSdkToCompileSdkIfUnset 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üne ayarlanıyordu.
false → true Uygulamalar ve testler için hedef SDK sürümünü açıkça belirtin.
android.onlyEnableUnitTestForTheTestedBuildType 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ış, hata ayıklama veya yayınlama için birim testlerinin çalıştırılmasıydı.
false → true Projeniz hem hata ayıklama hem de yayınlama için testlerin çalıştırılmasını gerektirmiyorsa herhangi bir değişiklik yapmanız gerekmez.
android.proguard.failOnMissingFiles AGP DSL'de belirtilen saklama dosyalarından herhangi biri diskte yoksa derleme başarısız olur ve hata verir. 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ı beyanlarını kaldırın
android.r8.optimizedResourceShrinking R8'in, sınıfları ve Android kaynaklarını birlikte değerlendirerek daha az Android kaynağı tutmasına olanak tanır. false → true Projenizin saklama kuralları zaten tamamlanmışsa herhangi bir değişiklik yapmanız gerekmez.
android.r8.strictFullModeForKeepRules Bir sınıf tutulduğunda varsayılan oluşturucuyu dolaylı olarak tutmayarak R8'in daha az tutmasına olanak tanır. Yani -keep class A artık -keep class A { <init>(); } anlamına gelmez
false → true Projenizin saklama kuralları zaten tamamlanmışsa herhangi bir değişiklik yapmanız gerekmez.

Varsayılan kurucunun saklanması gereken durumlarda projenizin saklama kurallarında -keep class A yerine -keep class A { <init>(); } kullanın.
android.defaults.buildfeatures.resvalues Tüm alt projelerde resValues özelliğini etkinleştirir. true → false resValues'i yalnızca ihtiyaç duyan alt projelerde etkinleştirmek için bu projelerin Gradle derleme dosyalarında aşağıdaki ayarı yapın:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders Tüm alt projelerde gölgelendirici derlemeyi etkinleştirir. true → false Yalnızca derlenecek gölgelendiricileri içeren alt projelerde gölgelendirici derlemeyi etkinleştirmek için bu projelerin Gradle derleme dosyalarında aşağıdakileri ayarlayın:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed AGP 9.0'da getDefaultProguardFile(), proguard-android.txt yerine yalnızca proguard-android-optimize.txt değerini destekleyecek. Bunun amacı, proguard-android.txt içinde yer alan ­dontoptimize işaretinin yanlışlıkla kullanılmasını önlemektir. false → true Optimizasyondan kaçınmak istiyorsanız proguard-android-optimize.txt ile birlikte özel bir proguardFile'da ­dontoptimize seçeneğini açıkça belirtebilirsiniz. R8 optimizasyonunun avantajlarını azalttığı için mümkünse bu dosyadan ­dontoptimize işaretini kaldırın. Aksi takdirde, android.r8.globalOptionsInConsumerRules.disallowed=false ayarını yaparak kapsam dışında kalmayı seçin.
android.r8.globalOptionsInConsumerRules.disallowed AGP 9.0'dan itibaren, tüketici saklama 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çenekler içeren tüketici saklama dosyaları yalnızca uygulama modüllerinde kullanılmalıdır 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ş bu tür genel seçenekleri sessizce yoksayar. Bunun ne zaman gerçekleştiğini görmek için configuration.txt dosyasında (genellikle <app_module>/build/outputs/mapping/<build_variant>/configuration.txt gibi bir yolda bulunur) şu tür yorumlar olup olmadığını kontrol edebilirsiniz: # REMOVED CONSUMER RULE: ­dontoptimize false → true Yayınlanan kitaplıklardan uyumsuz kurallar kaldırılmalıdır. Dahili kitaplıklar, uyumsuz ancak gerekli kuralları bir uygulama modülündeki proguardFile dosyasına taşımalıdır. android.r8.globalOptionsInConsumerRules.disallowed=false ayarını yaparak devre dışı bırakabilirsiniz. Tüketici Keep dosyalarınızın tümü uyumlu hale geldiğinde kapsam dışında kalma seçeneğini kaldırın.
android.sourceset.disallowProvider AndroidSourceSet DSL'yi kullanarak oluşturulan kaynaklar için sağlayıcıların iletilmesine izin verilmez. false → true Oluşturulan kaynakları kaydetmek için androidComponents üzerinde Sources API'sini kullanın.
android.custom.shader.path.required Gölgeleyici derleme etkinleştirilmişse gölgeleyici derleyici yolunun local.properties içinde açıkça ayarlanması gerekir. false → true Projenizin local.properties dosyasına 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şik Wear OS uygulaması desteği
    AGP 9.0, artık Play'de desteklenmeyen Wear OS uygulamalarını yerleştirme desteğini kaldırır. Buna wearApp yapılandırmalarının ve AndroidSourceSet.wearAppConfigurationName DSL'nin kaldırılması da dahildir. Uygulamanızı Wear OS'te nasıl yayınlayacağınızı öğrenmek için Wear OS'te dağıtma başlıklı makaleyi inceleyin.
  • androidDependencies ve sourceSets rapor görevi
  • 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ır. İşlev ve ilgili API'ler kaldırıldı. AGP 9.0 veya sonraki sürümleri kullanarak bölünmüş 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 önemli DSL değişiklikleri yapılmıştır:

  • CommonExtension parametreleştirmesi kaldırıldı.

    Bu, gelecekte kaynak düzeyinde zarar veren değişiklikleri önlemeye yardımcı olmak için yalnızca kaynak düzeyinde zarar veren bir değişikliktir ancak aynı zamanda engelleme yöntemlerinin CommonExtension'den ApplicationExtension, LibraryExtension, DynamicFeatureExtension ve TestExtension'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öntemlerini kullanmayacak şekilde güncellenmiştir:

    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 eklentiler için alıcıyı doğrudan kullanmak, 9.0'dan eski AGP sürümleriyle ikili program uyumludur.

DSL kaldırıldı

Android Gradle eklentisi 9.0'da kaldırılanlar:

Kaldırılan API'ler

Android Gradle eklentisi 9.0'da kaldırılanlar:

Kaldırılan Gradle özellikleri

Aşağıdaki Gradle özellikleri, başlangıçta varsayılan olarak etkinleştirilen özellikleri genel olarak devre dışı bırakmak için eklenmiştir.

Bu özellikler, AGP 8.0 veya daha eski sürümlerden itibaren 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.defaults.buildfeatures.aidl 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
  }
}
AIDL kaynakları içeren her alt projenin Gradle derleme dosyasında
android.defaults.buildfeatures.renderscript 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

Aşağıdaki Gradle özelliklerini ayarlarsanız AGP 9.0 hata verir.

Android Gradle eklentisi Yükseltme Asistanı, bu özellikleri kullanan projeleri AGP 9.0'a yükseltmez.

Özellik İşlev
android.r8.integratedResourceShrinking Kaynak daraltma artık her zaman R8'in bir parçası olarak çalıştırılır. Önceki uygulama kaldırıldı.
android.enableNewResourceShrinker.preciseShrinking Kaynak küçültme artık her zaman hassas kaynak küçültme özelliğini kullanır. Bu sayede daha fazla kaynak kaldırılabilir.

R8 değişiklikleri

Aşağıdaki R8 değişiklikleri AGP 9.0.0'a dahildir.

Yeni yapılandırma seçeneği -processkotlinnullchecks

Kotlin boş değer kontrollerini işlemek için R8'i yapılandırmak üzere yeni R8 seçeneği -processkotlinnullchecks'i ekledik. Seçenek, şu üç değerden biri olması gereken zorunlu bir bağımsız değişken alır: keep, remove_message ve remove. Bu seçenek, Kotlin derleyicisi tarafından eklenen aşağıdaki boş değer 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:

  • keep, kontrolleri değiştirmez.
  • remove_message, her bir kontrol yöntemi çağrısını, çağrının ilk bağımsız değişkeninde getClass() çağrısına yeniden yazar (null kontrolünü etkili bir şekilde korur ancak mesaj içermez).
  • remove, kontrolleri tamamen kaldırır.

R8 varsayılan olarak remove_message kullanır. -processkotlinnullchecks ile ilgili tüm spesifikasyonlar bunu geçersiz kılar. Birden fazla kez belirtilirse en güçlü değer kullanılır.

Keep bilgilerini tamamlayıcı yöntemlere yaymayı durdurma

Saklama kuralları, desugaring işlemine tabi olan arayüz yöntemleriyle eşleştiğinde R8, daha önce optimizasyona izin verme ve küçültmeye izin verme bitlerini sentezlenmiş tamamlayıcı yöntemlere dahili olarak aktarıyordu.

AGP 9.0'dan itibaren, saklama kuralları artık tamamlayıcı yöntemler için geçerli değildir. Bu durum, 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 tamamlayıcı yöntemlere aktarılarak aşağıdaki kullanım alanı daha önce destekleniyordu:

  1. default/static/private arayüz yöntemlerini içeren bir kitaplığı, minSdk < 24 ve arayüz yöntemlerini koruyan kurallarla DEX'te derleyin.
  2. Sınıf yolunda kitaplık ve -applymapping ile bir uygulama derleyin.
  3. Uygulamayı ve kitaplığı birleştirin.

disallow obfuscation biti, tamamlayıcı yöntemlere aktarılmadığından bu işlemin yalnızca -applymapping ile çalıştığını unutmayın. Yani 1. adımda oluşturulan tamamlayıcı sınıfların yöntem adları gizlenir.

Bu kullanım alanı artık minSdk < 24 için desteklenmiyor. Bu sorunu çözmek için aşağıdakileri yapın:

  1. default/static/private arayüz yöntemlerini içeren kitaplığı, minSdk < 24 olan sınıf dosyalarına dönüştürün.
  2. Desugaring uygulanmış yapıyı, R8'i ve tamamlayıcı sınıflardaki arayüz yöntemlerini koruyan kuralları kullanarak derleyin.
  3. Uygulamayı, sınıf yolundaki kitaplıkla derleyin.
  4. Uygulamayı ve desugaring uygulanmış yapıyı birleştirin.

Bunun bir diğer yan etkisi de, arayüz companion yöntemleri içindeki anonim ve yerel sınıflar için iç sınıf ve kapsayan yöntem özelliklerini korumanın artık mümkün olmamasıdır.

Varsayılan olarak oluşturulan kaynak dosyayı r8-map-id-<MAP_ID> olarak değiştirin.

Bu değişiklik, 8.12.0 sürümünden itibaren AGP'de geçerlidir.

Yeniden izleme gerektiğinde (yani gizleme veya optimizasyon etkinleştirildiğinde) bir sınıf için varsayılan olarak yayınlanan kaynak dosya özelliği SourceFile yerine r8-map-id-<MAP_ID> olur.

Yeni kaynak dosya özelliği, gizlenmiş bir yığın izleme (stack trace) verildiğinde, yeniden izleme için gereken eşleme dosyasının kimliğini ayıklamayı mümkün kılar. Bu özellik, Logcat'te yığın izlemelerin (stack trace) otomatik olarak yeniden izlenmesini desteklemek için kullanılabilir.

Özel 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 tutulmadığında geçerli olur. ProGuard uyumluluk modunu kullanan ve eşleme dosyası kimliğini yığın izlemelerine dahil etmek 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, harita karmasının tamamıdır ve daha önce kullanılan harita karmasının 7 karakterlik bir öneki değildir.

L8 desugaring işleminde küçültülmüş sentetik adların kullanımını etkinleştirme

D8 tarafından oluşturulan yapay sınıfların adı normalde $$ExternalSynthetic alt dizesini içerir. Bu dize, sınıfın D8 tarafından oluşturulan bir yapay sınıf olduğunu gösterir. Ayrıca, sentetik adı sentetik türünü de kodlar (ör. Backport, Lambda). Sınıf adları dize havuzunda daha fazla yer kapladığından bu durum, elde edilen DEX boyutunu olumsuz etkiler.

AGP 9.0, L8'i (temel kitaplık desugaring) yapılandırarak 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 kullanmasını sağlar. Yeni sınıf adı, sayısal bir kimlik (ör. $1) kullanır.

-addconfigurationdebugging için desteği kaldır

AGP 9.0, -addconfigurationdebugging desteğini kaldırır. Derleyici artık işaret kullanıldığında uyarı bildiriyor.

D8/R8'den L8 kuralları oluşturma desteğini kaldırma

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ıyor. Bunun yerine TraceReferences politikasını kullanmanız gerekir.

Daha açık belirtmek gerekirse 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ı.

Düzeltilen sorunlar

Android Gradle eklentisi 9.0.0

Düzeltilen Sorunlar
Android Gradle Eklentisi
Özellik isteği: İdeal AGP sürümünü özellik olarak ekleme
SingleArtifact.VERSION_CONTROL_INFO_FILE öğesini kararlı kıl
androidTest connectedCheck logcat çıktısı bozuk
AGP'deki yerleşik Kotlin desteği, Kotlin kaynak kümeleriyle senkronize edilmemelidir.
missingDimensionStrategy, alakasız bir boyuttan olsa bile kendi adıyla eşleşen bir varyantı tercih eder.
AGP'deki yerleşik Kotlin desteği, Kotlin kaynak kümeleriyle senkronize edilmemelidir.
AGP 9.0.0-rc01, Kotlin kitaplıklarını kotlin() işlevi aracılığıyla çözümlemiyor
Built-in-kotlin, maven pom'da kotlin-stdlib bağımlılık kısıtlamasını yayınlamıyor
compileSdk ile targetSdk arasındaki fark için test durumu ekleme
Boş resConfigs değeri, belirsiz aapt hatasına yol açar
Saf Java projesinin kotlin stdlib'e bağımlılığı var.
AGP 9.0'da desteği sonlandırılan KotlinMultiplatformAndroidCompilationBuilder özellikleri kaldırıldı
`com.android.tools.build:gradle:9.0.0-alpha05`, KGP ve gradle-api'ye API bağımlılığına sahip olmalıdır.
com.android.experimental.built-in-kotlin Gradle eklentisini yeniden adlandırma
AGP9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` çalışmıyor
Derleme SDK'sındaki AAR meta veri kontrolleri eski DSL'yi kullanıyor
Desteği sonlandırılan `com.android.build.api.dsl.ManagedDevices.devices` mülkünü kaldırma
AGP'deki yerleşik Kotlin desteği, Kotlin kaynak kümeleriyle senkronize edilmemelidir.
Tüketici saklama dosyası -dontobfuscate içeriyorsa Android kitaplığı yayınlama başarısız olur
Optimize Edilmiş Kaynaklar İçin Eşlemeyi Yazdırma Seçeneği Yok
Bu aşama geçildikten sonra finalizeDsl çağrıldığında hata verilmesini sağlayın.
AGP, jetifier devre dışı bırakıldığında bile jetifier yapılandırmasını başlatıyor
Kotlin'de yerleşik olarak bulunan, "kotlin.stdlib.default.dependency" modül ve pom dosyaları için doğru olduğunda kotlinStdlib'i derleme süresi bağımlılığı olarak eklemez.
Yeni optimizasyon DSL'si varsayılan olarak configuration.txt dosyasını oluşturmaz
AGP 8.13.0, bir modüldeki gezinme grafiğini doğrulayamıyor
AGP, desteği sonlandırılmış Gradle API'sini kullanıyor: çok dizeli gösterim
minSdkVersion >=21 ile eski multidex kitaplığını kullanmaya çalışan kullanıcıları uyarır.
Kod oluşturma görevleri varsa derleme başarısız olur
`android.builtInKotlin=false`, `android.newDsl=false` ve `android.enableLegacyVariantApi=false` ile `kotlin-android` eklentisinin kullanımı "API 'applicationVariants' is obsolete" hatasıyla başarısız olur.
Yerleşik Kotlin, kotlin.stdlib.default.dependency=false olduğunda sürümsüz kotlin-stdlib'i çözemiyor
DexData, bir dosyayı kapatmadan açarak temizleme işlemini engelliyor
AndroidSourceDirectorySet, AGP 9.0'da PatternFilterable'ı genişletmeyi durdurmalıdır.
Yalnızca test modüllerinde Test Fixture Hatası
Test donanımlarında bağlam alıcıları kullanılırken yanlış hata mesajı gösterilmesi
testFixtures'daki Kotlin kodu için yanlış IDE hataları
`legacy-kapt` eklentisi, `kotlin-kapt`'tan farklı olarak ek açıklama işlemeyi atlar.
compileSdkSpec.minorApiLevel, SettingsExtension ile çalışmıyor
[fused lib - public] Oluşturulan birleştirilmiş kitaplık, kaynakları içermiyor
extractNativeLibs ve useEmbeddedDex, manifest dosyasından gelmemelidir
AGP 9.0.0-alpha09'da R8'den gelen uyarılar
AGP 9.0'da desteği sonlandırılan AndroidSourceSet.jni kaldırıldı
AGP 9.0'da Installation.installOptions() kaldırıldı
AGP 9.0'da BuildType.isRenderscriptDebuggable kaldırıldı.
android.defaults.buildfeatures.renderscript'i kaldırma
`com.android.kotlin.multiplatform.library`, Gradle tarafından yönetilen cihazlarda kilitleniyor
`android.defaults.buildfeatures.aidl` varsayılan gradle.properties işaretlerini kaldırma
Proguard dosyası yoksa derleme başarısız olsun
buildconfig varsayılan gradle.properties işaretlerini kaldırma
Uygulamanın targetSdk varsayılan değerini minSdk yerine compileSdk'ya göre olacak şekilde değiştirin
`isIncludeAndroidResources` etkinleştirildiğinde `process{Variant}UnitTestManifest`, AGP 8.12.0'da tools:overrideLibrary kullanımlarını birleştiremiyor.
AGP, JVM test görevleri için Gradle'da desteğin sonlandırılmasıyla ilgili uyarılara neden oluyor
DependencyReportTask, yapılandırma önbelleğiyle uyumlu değil
AGP 9.0'da varsayılan kaynak/hedef Java sürümünü Java 8'den Java 11'e geçirme
android.useAndroidX varsayılan değerini true olarak değiştirme
Yerleşik Kotlin ile kapt eklentisi uygulanırken daha iyi istisna.
android.proguard.failOnMissingFiles, consumerProguardFiles için çalışmıyor
Kotlin Gradle eklentisi bağımlılığı 2.2.10 sürümüne güncellendi
KGP API'yi kullanarak KotlinJvmAndroidCompilation oluşturma
Kotlin açık API modu, test kaynaklarına uygulandı
Hata analizi
AGP 8.11.0: .gradle.kts dosyaları apply(from = "...") ile uygulanırken lintAnalyzeRelease görevi kilitleniyor
Lint ChecksSdkIntAtLeast Check, ek açıklamalı değerin doğru olup olmadığını kontrol etmez
Yerleşik Kotlin, META-INF'ye .kotlin_module eklemiyor
Lint sınıf yolu, farklı sürümlerde yinelenen sınıflar içeriyor
Özel kaynakları geçersiz kılma geçici çözümü çalışmıyor (tools:override = "true")
Hata: Kullanılmayan kaynaklar kaldırıldığında bu kaynakların çevirileri kaldırılmıyor ve bu konuda soru sorulmuyor.
Lint, "K2 önbellekleri temizlenemedi" uyarısı veriyor
Lint, "K2 önbellekleri temizlenemedi" uyarısı veriyor
Hata Analizi Entegrasyonu
systemPropertyInputs.javaVersion farklılıkları nedeniyle farklı JDK satıcıları veya küçük sürümlerde AndroidLintAnalysisTask önbelleğinda bulunamama sorunları
Lint, compileSdk'ya rağmen otomatik olarak en son yüklenen SDK'yı kullanır, görev girişi olarak kaydetmez ve önbelleğe almayı bozar.
Küçültücü (R8)
R8 ile optimize edilmiş, kullanılmayan kaynakları kaldırma işlemi, nihai kaynak kimlikleri kullanılıyorsa sessizce başarısız oluyor