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 uygulaması için JetBrains'in AGP 9 yükseltme becerisini deneyin. Android Studio'da becerileri kullanma hakkında daha fazla bilgi için Temsilci modunu 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 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'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şim olacaktır. applicationVariants ve benzer API'lerin kullanımı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 desteği sonlandırılmış çeşitli 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'leri tarafından kapsanmayan bir kullanım alanı varsa sorun bildirin.
variantFilter Seçilen varyantların devre dışı bırakılmasına izin verir. 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örler üzerinde test çalıştırmak için özel test ortamlarının kaydı. Gradle tarafından yönetilen cihazlar'a 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 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 hâlâ gösterilir 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 değişken 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 taşıma işlemi 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 Varyant 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 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 yüksek 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 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 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'si 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ı koruyabilirsiniz:

Ö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 değişken 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 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ı kullanın.
android.default.androidx.test.runner Cihaz üzerinde testleri varsayılan olarak androidx.test.runner.AndroidJUnitRunner sınıfıyla çalıştırın. Bu sınıf, InstrumentationTestRunner için kullanımdan kaldırılan varsayılan sınıfın yerini alır.
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ürecindeki optimizasyonlar da etkinleştirilir. Bu sayede, çok sayıda Android kitaplığı alt projesi içeren derlemelerin içe aktarma süresi kısalı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, kaynak değişikliği olmadan 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 işlemi hata vererek başarısız olur. 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 kurucuyu örtülü 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 özelliğini 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 sürümünü 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 özel bir proguardFile'da ­dontoptimize değerini açıkça belirtebilir ve proguard-android-optimize.txt kullanabilirsiniz. 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 yorumları 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 kapsam dışında kalabilirsiniz. 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 vermeyin. false → true Oluşturulan kaynakları kaydetmek için androidComponents üzerinde Sources API'sini kullanın.
android.custom.shader.path.required Gölgelendirici derleme etkinleştirilmişse gölgelendirici 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, Wear OS uygulamalarını yerleştirme desteğini kaldırır. Bu özellik artık Google Play'de desteklenmemektedir. 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'e 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'lar 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)
            }
        }
    }
    

    Çeşitli AGP sürümlerini hedefleyen eklentiler için alıcıyı doğrudan kullanmak, 9.0'dan eski AGP sürümleriyle ikili uyumludur.

Kaldırılan DSL

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 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 bir 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.

Bilgileri saklama talimatını 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 bitlerini tamamlayıcı yöntemlere aktararak aşağıdaki kullanım alanı daha önce destekleniyordu:

  1. default/static/private arayüz yöntemleri içeren bir kitaplığı, minSdk < 24 ve arayüz yöntemlerini koruyan kurallarla DEX'e derleyin.
  2. Uygulamayı, sınıf yolunda kitaplık ve -applymapping ile 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 desteklenmeyecek. 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 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 tamamlayıcı 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.

Bir sınıf için varsayılan olarak oluşturulan kaynak dosya özelliği, yeniden izleme gerektiğinde (yani gizleme veya optimizasyon etkinleştirildiğinde) 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 dosya özelliği kullanılıyorsa (-renamesourcefileattribute) bu özel kaynak dosya özelliği öncelikli olmaya devam eder.

ProGuard uyumluluk modunda (gradle.properties, android.enableR8.fullMode=false içerdiğinde) r8-map-id-<MAP_ID> kaynak dosya ö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 özelliğini 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 (örneğin, Backport, Lambda). Sınıf adları dize havuzunda daha fazla yer kapladığından, bu durum ortaya çıkan 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ı. --desugared-lib-pg-conf-output desteği de 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 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 bir test durumu ekleyin
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 özelliklerini kaldırma
`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` özelliği kaldırıldı.
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ısı yapıldığında hata döndürülür.
AGP, jetifier devre dışı bırakıldığında bile jetifier yapılandırmasını başlatıyor
"kotlin.stdlib.default.dependency" modül ve pom dosyaları için doğru olduğunda Kotlin'de yerleşik olarak bulunan özellik, 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
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" (API 'applicationVariants' eski) 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`'ın aksine 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ırın
`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ı mevcut olmadığında 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ı uyarılarına 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: lintAnalyzeRelease görevi, apply(from = "...") ile .gradle.kts dosyaları uygulanırken kilitleniyor
Hata analizi ChecksSdkIntAtLeast kontrolü, 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 bunları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 tarafından optimize edilmiş, kullanılmayan kaynakları kaldırma işlemi, nihai kaynak kimlikleri kullanılıyorsa sessizce başarısız oluyor