Android Gradle eklentisi 9.0.0 (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.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.android eklentisi yeni DSL ile uyumlu değildir.
  • KMP projelerini KMP için Android Gradle kitaplık eklentisine geçirme: org.jetbrains.kotlin.multiplatform eklentisinin com.android.library ve com.android.application eklentileriyle 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. applicationVariants ve benzeri API'lerin tüm kullanımlarını yeni androidComponents API ile değiştirin. androidComponents API, 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 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 tüm API'lerin doğrudan yerine geçecek bir API olmayabilir. Yeni varyant 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 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 planına geçin.
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider ve
wrapJavaSourceSet
Ç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.newDsl 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.
falsetrue 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.builtInKotlin Yerleşik Kotlin'i etkinleştirir. falsetrue 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. falsetrue 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. falsetrue androidx bağımlılıklarını benimseyin.
android.default.androidx.test.runner 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 = "..."
  }
}
falsetrue Kullanın AndroidJUnitRunner, veya özel testInstrumentationRunner öğenizi 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'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.
truefalse 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.enableAppCompileTimeRClass 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.
falsetrue 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.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ü olurdu.
falsetrue 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ış, birim testlerinin hata ayıklama veya yayınlama için çalıştırılmasıydı.
falsetrue 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.proguard.failOnMissingFiles 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. falsetrue Geçersiz ProGuard dosyası bildirimlerini kaldırın.
android.r8.optimizedResourceShrinking R8'in sınıfları ve Android kaynaklarını birlikte değerlendirerek daha az Android kaynağını korumasına olanak tanır. falsetrue Projenizin saklama kuralları zaten tamamlanmışsa herhangi bir değişiklik yapmanız gerekmez.
android.r8.strictFullModeForKeepRules 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.
falsetrue 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.defaults.buildfeatures.resvalues Tüm alt projelerde resValues özelliğini etkinleştirir. truefalse 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.defaults.buildfeatures.shaders Tüm alt projelerde gölgelendirici derlemeyi etkinleştirir. truefalse 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.r8.proguardAndroidTxt.disallowed 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. falsetrue 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.r8.globalOptionsInConsumerRules.disallowed 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 falsetrue 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.sourceset.disallowProvider AndroidSourceSet DSL'sini kullanarak oluşturulan kaynaklar için sağlayıcıların iletilmesine izin vermeyin. falsetrue Oluşturulan kaynakları kaydetmek için androidComponents üzerinde Sources API'sini kullanın.
android.custom.shader.path.required Gölgelendirici derleme etkinse local.properties içinde gölgelendirici derleyici yolunun açıkça ayarlanması gerekir. falsetrue 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, wearApp yapılandırmaları ve AndroidSourceSet.wearAppConfigurationName DSL'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.
  • androidDependencies ve sourceSets rapor 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ı:

  • CommonExtension parametrelendirmesi 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'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ö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:

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ı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.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ını 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

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.r8.integratedResourceShrinking Kaynak küçültme artık her zaman R8'in bir parçası olarak çalıştırılıyor. Önceki uygulama kaldırıldı.
android.enableNewResourceShrinker.preciseShrinking 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:

  • keep kontrolleri değiştirmez.
  • remove_message, her kontrol yöntemi çağrısını, çağrının ilk bağımsız değişkeninde getClass() ç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:

  1. default/static/private arayü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.
  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ş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:

  1. default/static/private arayüz yöntemleriyle kitaplığı, minSdk < 24 olan sınıf dosyalarına dönüştürün.
  2. R8'i ve arayüz yöntemlerini yardımcı sınıflarda tutan kuralları kullanarak şekersiz hale getirilmiş yapıyı derleyin.
  3. Uygulamayı, sınıf yolundaki kitaplıkla derleyin.
  4. 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
AGP 9.0.0-rc01, Kotlin kitaplıklarını kotlin() işlevi aracılığıyla çözmüyor

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
AGP'deki yerleşik Kotlin desteği, Kotlin kaynak kümeleriyle senkronize edilmemelidir.

Android Gradle eklentisi 9.0.0-beta04

Çözülen Sorunlar
Android Gradle Eklentisi
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 ediyor

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
Ö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
Hata analizi
AGP 8.11.0: apply(from = "...") ile .gradle.kts dosyaları uygulanırken lintAnalyzeRelease görevi kilitleniyor
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ı

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
AGP'deki yerleşik Kotlin desteği, Kotlin kaynak kümeleriyle senkronize edilmemelidir.
Tüketici saklama dosyası -dontobfuscate içeriyorsa Android kitaplık yayınlama işlemi başarısız olur.
Optimize edilmiş kaynaklar için yazdırma eşleme seçeneği yok
Bu aşama geçildikten sonra finalizeDsl'nin çağrılması hata olarak kabul edilir.
AGP, Jetifier devre dışı bırakılmış olsa bile Jetifier yapılandırmasını başlatıyor
Kotlin ile oluşturulan uygulamalarda, `kotlin.stdlib.default.dependency` modül ve pom dosyaları için doğru olduğunda kotlinStdlib derleme zamanı bağımlılığı olarak eklenmiyor
Hata Analizi Entegrasyonu
Lint, compileSdk'ya rağmen en son yüklenen SDK'yı otomatik olarak kullanıyor, görev girişi olarak kaydedilmiyor ve önbelleğe almayı bozuyor
Shrinker (R8)
Son kaynak kimlikleri kullanılıyorsa R8 ile optimize edilmiş kaynakları kaldırma işlemi sessizce başarısız oluyor

Android Gradle eklentisi 9.0.0-alpha13

Çözülen Sorunlar
Android Gradle Eklentisi
AGP9: `variant.sources.kotlin!!.addGeneratedSourceDirectory()` çalışmıyor
Derleme SDK'sında Aar meta veri kontrolleri eski DSL'yi kullanıyor
Kullanımdan kaldırılan "com.android.build.api.dsl.ManagedDevices.devices" özelliğini kaldırın

Android Gradle eklentisi 9.0.0-alpha12

Çözülen Sorunlar
Android Gradle Eklentisi
Saf Java projeleri, Kotlin stdlib'e bağımlıdır.
AGP 9.0'da kullanımdan kaldırılan KotlinMultiplatformAndroidCompilationBuilder özelliklerini kaldırma
`com.android.tools.build:gradle:9.0.0-alpha05`, KGP ve gradle-api üzerinde bir API bağımlılığına sahip olmalıdır.
com.android.experimental.built-in-kotlin Gradle eklentisini yeniden adlandırma

Android Gradle eklentisi 9.0.0-alpha11

Çözülen Sorunlar
Android Gradle Eklentisi
Built-in-kotlin, kotlin-stdlib bağımlılık kısıtlamasını Maven POM'da yayınlamıyor
compileSdk ile targetSdk arasındaki farklılık için test durumu ekleme
Boş resConfigs değeri, anlaşılması zor bir aapt hatasına neden oluyor

Android Gradle eklentisi 9.0.0-alpha10

Çözülen Sorunlar
Android Gradle Eklentisi
extractNativeLibs ve useEmbeddedDex, manifestten gelmemelidir.
AGP 9.0.0-alpha09'da R8'den gelen uyarılar
Hata analizi
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")

Android Gradle eklentisi 9.0.0-alpha09

Çözülen Sorunlar
Android Gradle Eklentisi
`legacy-kapt` eklentisi, `kotlin-kapt` eklentisinin aksine ek açıklama işlemeyi atlıyor
compileSdkSpec.minorApiLevel, SettingsExtension ile çalışmıyor
[fused lib - public] Oluşturulan birleştirilmiş kitaplık kaynakları içermiyor

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
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ılması "API 'applicationVariants' is obsolete" hatasıyla başarısız oluyor.
kotlin.stdlib.default.dependency=false olduğunda yerleşik Kotlin, sürüm içermeyen kotlin-stdlib'yi çözemiyor
DexData, dosyayı kapatmadan açtığı için temizleme işlemi engelleniyor
AndroidSourceDirectorySet, AGP 9.0'da PatternFilterable'ı genişletmeyi bırakmalıdır.
Yalnızca test modüllerinde test düzeneği hatası
Test fikstürlerinde bağlam alıcıları kullanılırken yanlış hata
testFixtures'daki Kotlin kodu için yanlış IDE hataları

Android Gradle eklentisi 9.0.0-alpha06

Çözülen Sorunlar
Android Gradle Eklentisi
Yeni optimizasyon DSL'si varsayılan olarak configuration.txt oluşturmaz
AGP 8.13.0, bir modüldeki gezinme grafiğini doğrulayamıyor
AGP, kullanımdan kaldırılan Gradle API'sini kullanıyor: çok dizeli gösterim
minSdkVersion >=21 olan eski multidex kitaplığını kullanmaya çalışan kullanıcıları uyarma
Hata analizi
Lint ChecksSdkIntAtLeast Check, açıklama eklenen değerin doğru olup olmadığını kontrol etmiyor

Android Gradle eklentisi 9.0.0-alpha05

Çözülen Sorunlar
Android Gradle Eklentisi
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'sini kullanarak KotlinJvmAndroidCompilation oluşturma
Kotlin açık API modu, test kaynaklarına uygulandı
Hata analizi
Lint, "K2 önbellekleri temizlenemedi" uyarısı veriyor

Android Gradle eklentisi 9.0.0-alpha04

Çözülen Sorunlar
Android Gradle Eklentisi
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ştirin.
Dahili Kotlin ile kapt eklentisi uygulanırken daha iyi istisna.
Hata analizi
Lint, "K2 önbellekleri temizlenemedi" uyarısı veriyor

Android Gradle eklentisi 9.0.0-alpha03

Çözülen Sorunlar
Android Gradle Eklentisi
`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 kullanımdan kaldırma uyarılarına neden oluyor
DependencyReportTask, yapılandırma önbelleğiyle uyumlu değil
Hata analizi
Hata: Kullanılmayan kaynakların kaldırılması, bu kaynakların çevirilerini de kaldırmıyor ve bu konuda soru sormuyor.

Android Gradle eklentisi 9.0.0-alpha02

Çözülen Sorunlar
Android Gradle Eklentisi
Proguard dosyası mevcut olmadığında derleme başarısız oluyor
remove buildconfig defaults gradle.properties flags
Uygulamanın targetSdk varsayılan değerini minSdk yerine compileSdk'ye göre değiştirme

Android Gradle eklentisi 9.0.0-alpha01

Çözülen Sorunlar
Android Gradle Eklentisi
AGP 9.0'da desteği sonlandırılan AndroidSourceSet.jni'yi kaldırma
AGP 9.0'da Installation.installOptions() öğesini kaldırma
AGP 9.0'da BuildType.isRenderscriptDebuggable'ı kaldırın.
android.defaults.buildfeatures.renderscript öğesini 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ırın.

Android Gradle eklentisi 9.0.0

Çözülen Sorunlar
AGP 9.0.0'da herkese açık sorunlar düzeltildi olarak işaretlenmedi