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 için Gradle'i güncelleme başlıklı makaleyi inceleyin.
SDK Oluşturma Araçları 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 başlıklı makaleyi inceleyin.

Yama sürümleri

Aşağıda, Android Gradle eklentisi 8.0 için yayınlanan yama sürümlerinin listesi verilmiştir.

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ılmış 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
Hata: AGP 7.2.2 -> 7.4.0'a yükseltme işleminden sonra "Tabloda belirtilen kimliğe sahip VersionRequirement yok"
markTypeAsLive AGP 7.4.1'de R8 NullPointerException
[R8 4.0.53] Android 11'de katı sınıf doğrulaması hatası

Çalışmayı kesintiye uğratan değişiklik: Modül düzeyinde derleme komut dosyasında ad alanı gerekli

Ad alanını manifest dosyasından ziyade 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 edinmek 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, test ad alanını ana ad alanından veya uygulama kimliğinden bazı durumlarda yanlış çıkarır. AGP Yükseltme Asistanı, projenizin ana ad alanının ve test ad alanının aynı olduğunu tespit ederse yükseltmeyi engeller. Yükseltme engelleniyorsa testNamespace değerini manuel olarak değiştirmeniz ve kaynak kodunuzu buna göre değiştirmeniz gerekir.
  • Test ad alanını değiştirdikten sonra, kodunuz derlenebilir ancak enstrümante edilmiş testleriniz çalışma zamanında başarısız olabilir. Bu durum, enstrümante edilmiş 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ı soruna ait 19 numaralı yorumu inceleyin.

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

AGP 8.0'dan itibaren, derleme performansını iyileştirmek için bu işaretlerin varsayılan değerleri 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ı, kodunuzu yeni davranışa uyacak şekilde 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, ihtiyaç duyduğunuz projelerde DSL'yi kullanarak belirtmeniz gerekir.
android.defaults.buildfeatures.aidl false true AGP 8.0, AIDL desteğini varsayılan olarak etkinleştirmez. Bu seçeneği, ihtiyaç duyduğunuz projelerde DSL'yi kullanarak belirtmeniz gerekir. Bu işaretin AGP 9.0 sürümünde 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, ihtiyaç duyduğunuz projelerde DSL'yi kullanarak belirtmeniz gerekir. Bu işaretin AGP 9.0 sürümünde 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: Zorunlu derleme seçeneği değerleri

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 değer Notlar
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0, Gradle yapılandırma sürelerini olumsuz yönde etkilediği için yapılandırma aşamasında yapılandırma çözünürlüğü algılarsa uyarı verir.
android.r8.failOnMissingClasses true AGP 8.0, daha iyi DEX optimizasyonu sağlamak için sınıflar eksikse R8 kullanan derlemeleri başarısız kılar. Bu sorunu gidermek için eksik kitaplıkları veya -dontwarn tutma kurallarını eklemeniz gerekir. Daha fazla bilgi için R8 sıkıştırıcısında sınıf uyarıları eksik başlıklı makaleyi inceleyin.
android.testConfig.useRelativePath true Birim testlerinde Android kaynaklarının, öğelerinin ve manifest dosyalarının 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, JAR dosyaları oluştururken derleme performansını iyileştirmek için Zipflinger kitaplığını kullanır.
android.bundletool.includeRepositoriesInDependencyReport true AAB'lere ve APK'lara SDK bağımlılık bilgileri ekleme özelliği etkinleştirildiğinde AGP 8.0, bu bilgilere proje depolarının listesini de ekler. Daha fazla bilgi için Play Console için bağımlılık bilgileri başlıklı makaleyi inceleyin.
android.enableArtProfiles true Taban profiller artık her zaman oluşturulur. Ayrıntılar için Referans Profilleri başlıklı makaleyi inceleyin.
android.enableNewResourceShrinker true Varsayılan olarak yeni kaynak küçültme uygulamasını kullanın. Yeni kaynak sıkıştırıcı, dinamik özellikler için destek içerir.
android.enableSourceSetPathsMap true Göreli 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ını proje konumuna göre izlediği için derlenmiş kitaplık kaynakları artık varsayılan olarak önbelleğe alınabilir. android.enableSourceSetPathsMap'ün etkinleştirilmesi gerekir.
android.disableAutomaticComponentCreation true AGP 8.0 varsayılan olarak SoftwareComponent oluşturmaz. Bunun yerine AGP, yalnızca yayınlama DSL'si kullanılarak yayınlanacak şekilde yapılandırılmış varyantlar için SoftwareComponents oluşturur.

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

AGP, yeni android.settings.executionProfile işaretini içerir. SettingsExtension kaynağındaki 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 göz atın.

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

Kotlin'de gecikmeli mülk atama desteklenmez.

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

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 sonraki bir sürüm kullanılıyorsa Derleme Analizörü, görevleri tek tek göstermek yerine kategoriye göre gruplandırır. Örneğin, Android Kaynakları, Kotlin veya Dexing'e özgü 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 kategori genişletildiğinde ilgili görevlerin listesi gösterilir. Görevleri gruplandırmadan tek tek görüntülemek için Gruplandır açılır menüsünü 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ç çalıştırma 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ına uygulayın:

apply plugin 'com.android.settings'

Genel yapılandırmaları merkezi hale getirme

Genel yapılandırmaları yapılandırmak için settings.gradle dosyasında yeni android bloğunu kullanın. 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ışacağını belirler. Ortamına 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şkenlerini 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, yürütme profilleri oluşturun ve settings.gradle dosyasında 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 gradle.properties dosyasında android.experimental.settings.executionProfile mülkünü kullanarak farklı bir profil seçin:

android.experimental.settings.executionProfile=high

Bu özelliği, farklı iş akışları oluşturmanıza olanak tanıyan komut satırını kullanarak da ayarlayabilirsiniz. Örneğin, sürekli entegrasyon iş akışınız varsa settings.gradle dosyasını değiştirmek zorunda kalmadan yürütme profilini değiştirmek için komut satırını kullanabilirsiniz:

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

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

Uygulamanızı derlemek için Android Gradle Plugin 8.0'ı kullanırken Gradle'i çalıştırmak için artık JDK 17 gereklidir. Android Studio Flamingo, JDK 17'yi paketler ve Gradle'i varsayılan olarak kullanacak şekilde yapılandırır. Bu sayede çoğu Android Studio kullanıcısının projelerinde 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 kararsız derleme hatası
JavaPluginConvention ve HasConvention desteği sonlandırıldı
Yeni dönüştürme API'si için yanlış ve tutarsız dosya konumu
Android Gradle eklentisi, 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üncelleme
Gradle 7.4 başarısız oldu (AnalyticsService örneği oluşturulamadı)
AGP 7.4.0-alpha09'da javac'tan yeni "unknown enum constant"
MergeGeneratedProguardFilesCreationAction yapılandırması, yapılandırma önbelleğe alma açıkken bile yavaş
[AGP] Oluşturulan kaynak dizini IDE modeline ekleme (Variant API)
JavaPluginConvention ve HasConvention desteği sonlandırıldı
Varsayılan olarak R8'e ignorewarnings ekleme
Proguard dosyaları mevcut olmadığında uyarı gösterme
AGP 7.3.0, Gradle platform projeleri için Gradle senkronizasyonunu bozuyor
apksig kitaplığı: ApkVerifier$Result.getV4SchemeSigners() özel olarak işaretlenmiştir
Kapsam etkin değilse androidJacocoAnt yapılandırması oluşturmayı durdurma
@IntDef, kitaplık bileşeninde kullanıldığında aar dosyasında annotations.zip oluşturulmaz
ve için ortak süper tür bulunamadı
LINT_PRINT_STACKTRACE=true değerinin gradle mülk sürümünü ekleyin
Eski hazır yapı yapıları AAR'a paketleniyor
Desteği sonlandırılan uyarıyı gidermek ve Gradle 9.0'a hazırlanmak için hedef mülkten outputLocation mülküne geçiş yapın
JavaCompile görevini ayarlarken `--release` işaretini dikkate alın
[AGP-7.3.0-beta03] xml beyanından sonra boş satır olduğunda ShrinkResourcesNewShrinkerTask başarısız oluyor
lintVital hedefi varsayılan olarak hata ayıklama varyantında çalıştırılır
Proguard dosyaları mevcut olmadığında uyarı gösterme
AGP, görev yürütme aşamasında kotlinOptions.freeCompilerArgs öğesini eklemeye çalışıyor
Gradle senkronizasyonu başarısız oldu: Senkronizasyon başarısız oldu: Bilinmeyen bir nedenden dolayı
DependencyReportTask, yapılandırma önbelleğiyle uyumlu değil
build.gradle dosyasında resValue ile kaynakların geçersiz kılınması "Yinelenen kaynaklar" hatasına neden oluyor
"Hata ayıklama" derleme türü varsayılan imzalama anahtarına sahiptir, diğerleri yoktur
Dinamik özelliklerin kullanılması ve kaynakların küçültülmesi çalışma zamanında kilitlenmeye neden oluyor
"Hata ayıklama" derleme türü varsayılan imzalama anahtarına sahiptir, diğerleri yoktur
lint modelinin ana kaynak sağlayıcısında Java dizini olarak listelenen oluşturulan 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 ekleme
AGP 7.4.0-alpha09'da javac'tan yeni "unknown enum constant"
AGP 7.4.0-alpha09, Firebase App Distribution'a yüklenmeyen derlemeler oluşturuyor
Modüllerdeki lint.xml, lint görevlerinin UP-TO-DATE kontrolü için dikkate alınmaz
Android Gradle eklentisi 7.0 ve sonraki sürümler ile Android Testleri sorunu: "id" kaynağı bulunamıyor
configureCMakeDebug, boş işaretçi istisnasıyla sık sık kilitleniyor
Projeyi AS2022.2.1.5 sürümüne yükseltirken IllegalAccessError, FireBasePerfPlugin
Senkronizasyon, "Koleksiyon, önermeyle eşleşen öğe içermiyor." şeklindeki anlaşılması güç bir hatayla başarısız oluyor.
Instrumentation API, yerel dosya bağımlılıkları dönüştürmez
7.4 Beta 1'e güncellenirken "AnnotationProcessorOptions.arguments are queried" hatası
Gradle'ın herkese açık eklentilerini gradle-api'ye taşıyın ve BasePlugin.getExtension'ı kaldırın
r8.jvmArgs kullanılmıyor
AGP için minimum sürüm olarak JDK17 gereklidir
AGP 8.0.0 A8, taban profilleri bozuyor
AGP 8.0'daki CheckAarMetadataTask mesajında "compileSdkVersion" değerini "compileSdk" olarak değiştirin
AGP 7.4.0-rc01, "..." görevi tamamlanmadan önce map(provider(java.util.Set)) eşlenen değerinin sorgulanması desteklenmez" 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 yapmak yapılandırma önbelleğini bozar
Lint eklentisi, gradle-api'nin parçası değildir.
DexingFileDependenciesTask.outputKeepRules bir dizin ancak OutputFile olarak işaretlenmiş
AGP 7.4'e yükseltme işlemi StackOverflowError hatasına neden oluyor
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
Lint, bağımlılık olmadan kaynak kümesi bilgilerine erişiyor
Derleme hatası, mevcut olmayan API düzeyi 34'e işaret ediyor
Daha yenisi olmadığında "Daha yeni bir Android Gradle eklentisi kullanmanızı öneririz"
android.injected.testOnly=false çalışmıyor
Dexer (D8)
AS Canary 6'dan 7'ye yükseltme işleminden 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 anlaşılıyor
Lint
ResourceType lint kontrolü, Kotlin kaynakları için çalışmıyor
VersionChecks, Kotlin aralık kontrollerini işlemez
Sarmalanmışken InlinedApi için yanlış pozitif
openInputStream ile ilgili Lint yanlış pozitif geri dönüşümü
[BuildTool/Lint] ChecksSdkIntAtLeast constructor property
Lint: PartialResults birleştirme işlemi yanlış çalışıyor
Android Studio, belirtilen sürümü hatalı şekilde eski olarak işaretliyor.
AndroidDeprecationInspection.DeprecationFilter EP, android-plugin.xml dosyasına hiçbir zaman kaydedilmez
AccessibilityDetector lint kontrolünün 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ü typealias ile değiştirirken hata
Hata: ObjectAnimator mevcut kod bloğunun dışında oluşturulduğunda, başlatılmadığına dair yanlış pozitif uyarılar gösteriliyor #38
Lint: NPE due to querying Application instance in mergeOnly mode
NonConstantResourceId lint kuralı, kaynak kimliğinden sabit değerler atandığını algılayamıyor
not showing error on view id
Hata ayıklama kaynakları önbelleği, dizen dışına çıkarılamadığında hata ayıklama hatası oluşur (ancak uyarı olarak gösterilir).
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
TypedArray#close (API 31) şeker içermeyen hale getirilmedi ancak AS, try-with-resources işlevinde kullanıldığında uyarı göstermiyor
Lint, arama alıcıları için geçerli yayınlamayı kontrol etmiyor
Lint, yalnızca doğrudan uygulanan arayüzler için güvenli dönüştürmeleri kontrol eder, devralınan arayüzler için kontrol etmez.
Lint Entegrasyonu
Temel dosya şu anda Lint görevlerinin Giriş ve Çıkışı'dır.
Shrinker (R8)
CF çerçeve doğrulayıcısında NPE / iddia 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ıldığında 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 - Bir işlemi, itilemeyen bir iş listesindeki iş sırasına ekleme girişimi
Renderscript kodunu küçültme: AGP 7.3.1'den 7.4.0'a yükseltilirken büyük performans düşüşü

Android Gradle eklentisi 8.0.1

Çözülen Sorunlar
Shrinker (R8)
Hata: AGP 7.2.2 -> 7.4.0'a yükseltme işleminden sonra "Tabloda belirtilen kimliğe sahip VersionRequirement yok"
markTypeAsLive AGP 7.4.1'de R8 NullPointerException
[R8 4.0.53] Android 11'de katı sınıf doğrulaması hatası

Android Gradle eklentisi 8.0.2

Çözülen Sorunlar
Shrinker (R8)
R8, ArrayIndexOutOfBoundsException ile Compose derlemesi sırasında başarısız oluyor
VerifyError: Verifier rejected class when using R8 with Kotlin 1.8.20
AGP 8'deki R8, Google Fit hizmetini bozuyor
Giriş adlarıyla örtüşen artık adlara sahip kaynak dosya bilgileri doğru şekilde temsil edilmez