Android Gradle Plugin 8.0.0 (Nisan 2023)

Android Gradle eklentisi 8.0.0, çeşitli yeni özellikler ve iyileştirmeler içeren önemli bir sürümdür.

Uyumluluk

Minimum sürüm Varsayılan sürüm Notlar
Gradle 8.0 8.0 Daha fazla bilgi edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin.
SDK Build Tools 30.0.3 30.0.3 SDK oluşturma araçlarını yükleyin veya yapılandırın.
NDK Yok 25.1.8937393 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.

Yama sürümleri

Android Gradle eklentisi 8.0'ın yama sürümlerinin listesini aşağıda bulabilirsiniz.

Android Gradle eklentisi 8.0.2 (Mayıs 2023)

AGP 8.0.2'de düzeltilen hataların listesi için Android Studio 2022.2.1'de kapatılan sorunlar başlıklı makaleyi inceleyin.

Android Gradle eklentisi 8.0.1 (Mayıs 2023)

Bu küçük güncelleme aşağıdaki hata düzeltmelerini içerir:

Çözülen sorunlar
AGP 7.2.2 -> 7.4.0 sürümüne yükseltildikten sonra hata: "Tabloda belirtilen kimliğe sahip VersionRequirement yok"
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Android 11'de sınıf doğrulaması başarısız oluyor

Önemli değişiklik: Modül düzeyindeki derleme komut dosyasında ad alanı gerekli

Ad alanını manifest dosyası yerine modül düzeyindeki build.gradle.kts dosyasında ayarlamanız gerekir. AGP 7.3'ten itibaren namespace DSL mülkünü kullanmaya başlayabilirsiniz. Daha fazla bilgi için Ad alanı ayarlama başlıklı makaleyi inceleyin.

Ad alanı DSL'sine geçiş yaparken aşağıdaki sorunlara dikkat edin:

  • AGP'nin önceki sürümleri, bazı durumlarda test ad alanını ana ad alanından veya uygulama kimliğinden yanlış şekilde çıkarıyordu. AGP Yükseltme Asistanı, projenizin ana ad alanı ile test ad alanının aynı olduğunu tespit ederse yükseltmeyi engeller. Yükseltme engellenirse testNamespace manuel olarak değiştirmeniz ve kaynak kodunuzu buna göre düzenlemeniz gerekir.
  • Test ad alanını değiştirdikten sonra kodunuz derlenebilir ancak enstrümanlı testleriniz çalışma zamanında başarısız olabilir. Bu durum, enstrümantasyonlu test kaynak kodunuz hem androidTest hem de uygulama kaynaklarınızda tanımlanan bir kaynağa referans veriyorsa ortaya çıkabilir.

Daha fazla bilgi için 191813691 numaralı sorunun 19 numaralı yorumuna bakın.

Önemli değişiklikler: derleme seçeneği varsayılan değerleri

AGP 8.0'dan itibaren, bu işaretlerin varsayılan değerleri derleme performansını artırmak için değiştirildi. Kodunuzu bu değişikliklerin bazılarını destekleyecek şekilde ayarlama konusunda yardım almak için AGP Yükseltme Asistanı'nı (Araçlar > AGP Yükseltme Asistanı) kullanın. Yükseltme Asistanı, yeni davranışı desteklemek için kodunuzu güncelleme veya önceki davranışı korumak için işaretler ayarlama konusunda size yol gösterir.

İşaretle Yeni varsayılan değer Önceki varsayılan değer Notlar
android.defaults.buildfeatures.buildconfig false true AGP 8.0, varsayılan olarak BuildConfig oluşturmaz. Bu seçeneği, ihtiyacınız olan projelerde DSL kullanarak belirtmeniz gerekir.
android.defaults.buildfeatures.aidl false true AGP 8.0, varsayılan olarak AIDL desteğini etkinleştirmez. Bu seçeneği, ihtiyacınız olan projelerde DSL kullanarak belirtmeniz gerekir. Bu işaretin AGP 9.0'da kaldırılması planlanmaktadır.
android.defaults.buildfeatures.renderscript false true AGP 8.0, RenderScript desteğini varsayılan olarak etkinleştirmez. Bu seçeneği, ihtiyacınız olan projelerde DSL kullanarak belirtmeniz gerekir. Bu işaretin AGP 9.0'da kaldırılması planlanmaktadır.
android.nonFinalResIds true false AGP 8.0, varsayılan olarak nihai olmayan alanlara sahip R sınıfları oluşturur.
android.nonTransitiveRClass true false AGP 8.0, yalnızca mevcut modülde tanımlanan kaynaklar için R sınıfları oluşturur.
android.enableR8.fullMode true false AGP 8.0, varsayılan olarak R8 tam modunu etkinleştirir. Daha fazla bilgi için R8 tam modu başlıklı makaleyi inceleyin.

Önemli değişiklikler: Derleme seçeneği değerleri zorunlu kılındı

AGP 8.0'dan itibaren bu işaretlerin değerlerini değiştiremezsiniz. Bunları gradle.properties dosyasında belirtirseniz değer yoksayılır ve AGP uyarıları yazdırır.

İşaretle Zorunlu kılınan değer Notlar
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0, yapılandırma aşamasında yapılandırma çözünürlüğünü algılarsa uyarı verir. Bunun nedeni, Gradle yapılandırma sürelerini olumsuz etkilemesidir.
android.r8.failOnMissingClasses true AGP 8.0, daha iyi DEX optimizasyonu sağlamak için eksik sınıflar varsa R8'i kullanan derlemelerde hata verir. Bu sorunu gidermek için eksik kitaplıkları eklemeniz veya -dontwarn kurallarını korumanız gerekir. Daha fazla bilgi için R8 küçültücüsünde eksik sınıf uyarıları başlıklı makaleyi inceleyin.
android.testConfig.useRelativePath true Birim testlerinde Android kaynaklarının, öğelerinin ve manifestlerinin kullanılması desteği etkinleştirildiğinde AGP 8.0, yalnızca göreli yollar içeren bir test_config.properties dosyası oluşturur. Bu, Android birim testlerinin her zaman Gradle derleme önbelleğini kullanabilmesini sağlar.
android.useNewJarCreator true AGP, derleme performansını artırmak için JAR dosyaları oluştururken Zipflinger kitaplığını kullanır.
android.bundletool.includeRepositoriesInDependencyReport true AAB'lere ve APK'lara SDK bağımlılığı bilgileri ekleme özelliği etkinleştirildiğinde AGP 8.0, bu bilgilere proje depolarının bir listesini de ekler. Daha fazla bilgi için Play Console'un bağımlılık bilgileri başlıklı makaleyi inceleyin.
android.enableArtProfiles true Temel profiller artık her zaman oluşturulur. Ayrıntılar için Temel Profiller başlıklı makaleyi inceleyin.
android.enableNewResourceShrinker true Varsayılan olarak yeni kaynak küçültme uygulamasını kullanın. Yeni kaynak küçültücü, dinamik özellikler için destek içerir.
android.enableSourceSetPathsMap true Göreceli kaynak yolu eşlemelerini hesaplamak için kullanılır. Böylece Gradle derlemeleri daha sık güncellenir.
android.cacheCompileLibResources true Gradle, kaynak dosyaları proje konumuna göre izlediği için derlenmiş kitaplık kaynakları artık varsayılan olarak önbelleğe alınabilir. android.enableSourceSetPathsMap'nın etkinleştirilmesi gerekir.
android.disableAutomaticComponentCreation true AGP 8.0, varsayılan olarak SoftwareComponent oluşturmaz. Bunun yerine AGP, yalnızca yayın DSL'si kullanılarak yayınlanacak şekilde yapılandırılan varyantlar için SoftwareComponent'lar oluşturur.

Yürütme profili için yeni kararlı işaret

AGP, yeni android.settings.executionProfile işaretini içerir. SettingsExtension varsayılan yürütme profilini geçersiz kılmak için bu işareti kullanın. Daha fazla bilgi için ayarlar eklentisi belgelerine bakın.

Deneysel özellikleri önizlemek için önizleme sürüm notlarına bakın.

Kotlin lazy özelliği ataması desteklenmiyor

Derleme komut dosyalarınız için Gradle'ın Kotlin DSL'sini kullanıyorsanız Android Studio ve AGP 8.0'ın, = operatörüyle deneysel özellik atamasını desteklemediğini unutmayın. Bu özellik hakkında daha fazla bilgi için sürüm notlarına ve belgelere bakın.

Derleme Analiz Aracı görev kategorileri

Android Studio Flamingo'dan itibaren Build Analyzer, derleme süresini etkileyen görevler için yeni bir varsayılan görünüme sahiptir. Projenizde AGP 8.0 veya daha yeni bir sürüm kullanılıyorsa Build Analyzer, görevleri tek tek göstermek yerine kategoriye göre gruplandırır. Örneğin, Android Kaynakları, Kotlin veya Dexing ile ilgili görevler birlikte gruplandırılır ve ardından derleme süresine göre sıralanır. Bu sayede, derleme süresini en çok etkileyen kategoriyi kolayca öğrenebilirsiniz. Her kategoriyi genişlettiğinizde ilgili görevlerin listesi gösterilir. Görevleri gruplandırmadan tek tek görüntülemek için Gruplandırma ölçütü açılır listesini kullanın.

Derleme Analiz Aracı görev kategorileri.

Yeni ayarlar eklentisi

AGP 8.0.0-alpha09, yeni ayarlar eklentisini kullanıma sunar. Ayarlar eklentisi, tüm modüller için geçerli olan genel yapılandırmaları tek bir yerde merkezileştirmenize olanak tanır. Böylece yapılandırmaları birden fazla modüle kopyalayıp yapıştırmanız gerekmez. Ayrıca, ayarlar eklentisini kullanarak araç yürütme profilleri veya bir aracın nasıl çalıştırılacağına dair farklı talimatlar oluşturabilir ve bunlar arasında geçiş yapabilirsiniz.

Ayarlar eklentisini kullanmak için eklentiyi settings.gradle dosyasında uygulayın:

apply plugin 'com.android.settings'

Genel yapılandırmaları merkezileştirme

Genel yapılandırmaları ayarlamak için android dosyasında yeni android bloğunu kullanın.settings.gradle Aşağıda bununla ilgili bir örnek verilmiştir:

android {
  compileSdk 31
  minSdk 28
  ...
}

Araç yürütme profilleri

Ayarlar eklentisi, bazı araçlar için yürütme profilleri oluşturmanıza da olanak tanır. Bir yürütme profili, aracın nasıl çalıştırılacağını belirler. Ortama bağlı olarak farklı yürütme profilleri seçebilirsiniz. Bir yürütme profilinde, bir araç için JVM bağımsız değişkenleri ayarlayabilir ve aracı ayrı bir işlemde çalışacak şekilde yapılandırabilirsiniz. Şu anda yalnızca R8 aracı desteklenmektedir.

Aşağıdaki örnekte gösterildiği gibi, settings.gradle dosyasında yürütme profilleri oluşturun ve varsayılan yürütme profilini ayarlayın:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Varsayılan profili geçersiz kılmak için android.experimental.settings.executionProfile dosyasındaki gradle.properties özelliğini kullanarak farklı bir profil seçin:

android.experimental.settings.executionProfile=high

Bu özelliği komut satırını kullanarak da ayarlayabilirsiniz. Bu sayede farklı iş akışları oluşturabilirsiniz. Örneğin, sürekli entegrasyon iş akışınız varsa settings.gradle dosyasını değiştirmenize gerek kalmadan komut satırını kullanarak yürütme profilini değiştirebilirsiniz:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

AGP 8.0'ı çalıştırmak için JDK 17 gerekir

Uygulamanızı oluşturmak için Android Gradle Plugin 8.0'ı kullanırken Gradle'ı çalıştırmak için artık JDK 17 gereklidir. Android Studio Flamingo, JDK 17'yi paketler ve Gradle'ı varsayılan olarak bu JDK'yı kullanacak şekilde yapılandırır. Bu nedenle, çoğu Android Studio kullanıcısının projelerinde herhangi bir yapılandırma değişikliği yapması gerekmez.

Android Studio'da AGP tarafından kullanılan JDK sürümünü manuel olarak ayarlamanız gerekiyorsa JDK 17 veya sonraki bir sürümü kullanmanız gerekir.

AGP'yi Android Studio'dan bağımsız olarak kullanırken JAVA_HOME ortam değişkenini veya -Dorg.gradle.java.home komut satırı seçeneğini JDK 17'nin yükleme dizininize ayarlayarak JDK sürümünü yükseltin.

Çözülen sorunlar

Android Gradle eklentisi 8.0.0

Çözülen Sorunlar
Android Gradle eklentisi
MergeResources görevinde güvenilir olmayan derleme hatası
JavaPluginConvention ve HasConvention kullanımdan kaldırıldı
Yeni dönüştürme API'si için yanlış ve tutarsız dosya konumu
Android Gradle Plugin, desteği sonlandırılan GUtil.toWords(string) işlevini kullanmamalıdır.
Android Gradle eklentisi, desteği sonlandırılan ConfigureUtil.configure(closure, target) işlevini kullanmamalıdır.
AGP testlerini KGP 1.7.20-Beta'yı kullanacak şekilde güncelleyin
Gradle 7.4 başarısız oluyor (AnalyticsService örneği oluşturulamadı)
AGP 7.4.0-alpha09'da javac'ten yeni "unknown enum constant" hatası
Yapılandırma önbelleğe alma özelliği etkin olsa bile MergeGeneratedProguardFilesCreationAction yapılandırması yavaş
[AGP] Oluşturulan kaynak dizini IDE modeline ekleme (Variant API)
JavaPluginConvention ve HasConvention kullanımdan kaldırıldı
Varsayılan olarak R8'e ignorewarnings eklemeyin
Proguard dosyaları mevcut olmadığında uyarı verme
AGP 7.3.0, Gradle platform projelerinde Gradle senkronizasyonunu bozuyor
apksig kitaplığı: ApkVerifier$Result.getV4SchemeSigners() özel olarak işaretlenmiş
Kapsam etkin değilse androidJacocoAnt yapılandırması oluşturmayı durdurun
Kitaplık bileşeninde @IntDef kullanıldığında aar'da annotations.zip oluşturulmuyor
ve için ortak üst tür bulunamadı.
LINT_PRINT_STACKTRACE=true için bir Gradle özelliği sürümü ekleyin.
Eski prefabrik yapılar AAR'ye paketleniyor
Kullanımdan kaldırma uyarısını gidermek ve Gradle 9.0'a hazırlanmak için hedef mülkten outputLocation mülküne geçiş yapma
JavaCompile görevini ayarlarken `--release` işaretini dikkate alın
[AGP-7.3.0-beta03] XML bildiriminden sonra boş satır olduğunda ShrinkResourcesNewShrinkerTask başarısız oluyor
Hata ayıklama varyantında varsayılan olarak lintVital hedefi çalıştırılır.
Proguard dosyaları mevcut olmadığında uyarı verme
AGP, görev yürütme aşamasında kotlinOptions.freeCompilerArgs'ı eklemeye çalışıyor
Gradle senkronizasyonu başarısız oldu: Senkronizasyon başarısız oldu: nedeni bilinmiyor
DependencyReportTask, yapılandırma önbelleğiyle uyumlu değil
build.gradle'de kaynakları resValue ile geçersiz kılmak "Hata: Yinelenen kaynaklar" hatasına neden oluyor
"Hata ayıklama" derleme türünde varsayılan imzalama anahtarı var, diğerlerinde yok
Dinamik özelliklerin ve kullanılmayan kaynakları kaldırma işleminin kullanılması, çalışma zamanında kilitlenmeye neden oluyor
"Hata ayıklama" derleme türünde varsayılan imzalama anahtarı var, diğerlerinde yok
lint modelinin ana kaynak sağlayıcısında Java dizini olarak listelenen oluşturulmuş kaynak dizini
Gradle 8.0-milestone-2, AGP'de istisnaya neden oluyor
Uygulamalar ve kitaplık için manifest birleştirme işlemini optimize etme
Javadoc oluşturma işlemine gradle-settings-api'yi ekleme
AGP 7.4.0-alpha09'da javac'ten yeni "unknown enum constant" hatası
AGP 7.4.0-alpha09, Firebase App Distribution'a yüklenemeyen derlemeler oluşturuyor
Modüllerdeki lint.xml, lint görevlerinin GÜNCEL olup olmadığı kontrolünde dikkate alınmaz.
Android Gradle eklentisi 7.0 ve sonraki sürümler ile Android testleri sorunu: Kaynak bulunamıyor: id
configureCMakeDebug, boş işaretçi istisnasıyla aralıklı olarak kilitleniyor
IllegalAccessError upgrading project to AS2022.2.1.5, FireBasePerfPlugin
Senkronizasyon, "Collection contains no element matching the predicate." (Koleksiyonda, koşulla eşleşen öğe yok.) şeklinde anlaşılması zor bir hatayla başarısız oluyor.
Instrumentation API, yerel dosya bağımlılıklarını dönüştürmez
7.4 Beta 1'e güncellenirken "AnnotationProcessorOptions.arguments are queried" hatası
Gradle genel eklentilerini gradle-api'ye taşıma ve BasePlugin.getExtension'ı kaldırma
r8.jvmArgs kullanılmıyor
AGP için minimum sürüm olarak JDK17 gereklidir
AGP 8.0.0 A8, temel profilleri bozuyor
AGP 8.0'daki CheckAarMetadataTask mesajında "compileSdkVersion"ı "compileSdk" olarak değiştirin.
AGP 7.4.0-rc01, "Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported" hatasıyla Variant API'yi bozuyor.
Yapılandırma önbelleğiyle ilgili `com.android.build.gradle.tasks.ShaderCompile` sorunları
AGP API'lerini kullanarak Java kaynaklarına ekleme yapıldığında yapılandırma önbelleği bozuluyor
Lint eklentisi, gradle-api'nin bir parçası değildir.
DexingFileDependenciesTask.outputKeepRules bir dizin ancak OutputFile olarak işaretlenmiş
AGP 7.4'e yükseltme işlemi StackOverflowError ile sonuçlanıyor
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
Lint, kaynak kümeleri bilgilerine bağımlılık olmadan erişir
Derleme hatası, mevcut olmayan API düzeyi 34'ü ifade ediyor
Daha yeni bir sürüm yokken "Daha yeni bir Android Gradle eklentisi kullanmanızı öneririz" mesajı gösteriliyor
android.injected.testOnly=false çalışmıyor
Dexer (D8)
AS Canary 6'dan 7'ye yükseltildikten sonra genel sentetiklerle ilgili Dex birleştirme hatası
Kotlin meta veri kitaplığını 0.6.0 sürümüne güncelleme
JDK-8272564 için geçici çözümün API düzeyi 28-30'da gerekli olduğu görülüyor.
Lint
ResourceType lint kontrolü, Kotlin kaynakları için çalışmıyor
VersionChecks, Kotlin aralık kontrollerini işlemez
Sarmalandığında InlinedApi için yanlış pozitif
openInputStream ile ilgili Lint yanlış pozitif geri dönüşümü
[BuildTool/Lint] ChecksSdkIntAtLeast oluşturucu özelliğini kontrol eder
Lint: PartialResults birleştirme işlemi yanlış çalışıyor
Android Studio, belirtilen sürümü yanlışlıkla eski olarak işaretliyor.
AndroidDeprecationInspection.DeprecationFilter EP, android-plugin.xml dosyasına hiçbir zaman kaydedilmiyor
AccessibilityDetector lint kontrolü açıklaması güncel değil
Lint SDK_INT kontrolleri, geçici yerel değişkenleri anlamalıdır.
TestMode.TYPE_ALIAS, işlev türünü tür takma adıyla değiştirirken hata oluşuyor
Hata: ObjectAnimator geçerli kod bloğunun dışında oluşturulduğunda başlatılmadığına dair yanlış pozitif uyarılar veriliyor #38
Lint: NPE due to querying Application instance in mergeOnly mode
NonConstantResourceId lint kuralı, kaynak kimliğinden sabit değerler atamayı algılayamıyor
görünüm kimliğinde hata gösterilmiyor
Lint kaynakları önbelleğinin seri durumdan çıkarma işlemi başarısız olduğunda lint hatası oluşuyor (ancak uyarı verilmesi gerekiyor)
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
TypedArray#close (API 31) yöntemi, desugared edilmiyor ancak try-with-resources içinde kullanıldığında AS uyarı göstermiyor
Lint, arama alıcıları için geçerli yayınları kontrol etmiyor
Lint yalnızca doğrudan uygulanan arayüzler için güvenli yayınları kontrol eder, devralınan arayüzler için kontrol etmez.
Lint Entegrasyonu
Temel dosya şu anda Lint görevlerinin bir Girişi ve Çıkışı'dır.
Shrinker (R8)
CF çerçeve doğrulayıcısında NPE / assertion hatası
Alan arama önbelleği kaldırıldıktan sonra gerileme
`:app:minifyVariantWithR8` AGP 7.4.0-beta02'de NullPointerException hatası veriyor
R8: -allowaccessmodification kullanılırken ClassNotFoundException
Meta verilerde bağlam alıcıları için destek ekleme
java.lang.VerifyError: Verifier rejected class androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) failed to verify: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] cannot access instance field java.lang.Object androidx.compose.ui.graphics.colorspace.n.a from object of type Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 - Attempt to enqueue an action in a non pushable enqueuer work list (İşlemi, gönderilemeyen bir sıralayıcı çalışma listesine ekleme girişimi)
Renderscript kodunu küçültme: AGP 7.3.1'den 7.4.0'a yükseltilirken performansta büyük düşüş yaşanıyor

Android Gradle eklentisi 8.0.1

Çözülen Sorunlar
Shrinker (R8)
AGP 7.2.2 -> 7.4.0 sürümüne yükseltildikten sonra hata: "Tabloda belirtilen kimliğe sahip VersionRequirement yok"
R8 NullPointerException at markTypeAsLive AGP 7.4.1
[R8 4.0.53] Android 11'de sınıf doğrulaması başarısız oluyor

Android Gradle eklentisi 8.0.2

Çözülen Sorunlar
Shrinker (R8)
R8, Compose derlemesi sırasında ArrayIndexOutOfBoundsException ile başarısız oluyor
VerifyError: R8, Kotlin 1.8.20 ile kullanılırken doğrulayıcı sınıfı reddetti
AGP 8'deki R8, Google Fit hizmetini bozuyor
Giriş adlarıyla çakışan artık adlara sahip kaynak dosya bilgileri doğru şekilde gösterilmiyor.