Android Gradle Plugin 8.0.0 (Nisan 2023)

Android Gradle eklentisi 8.0.0, yeni ve özellikleri ve iyileştirmeleri.

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 sayfasına göz atın.
SDK Derleme Araçları 30.0.3 30.0.3 SDK Derleme 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 için yama sürümlerinin listesi verilmiştir 8.0.

Android Gradle Eklentisi 8.0.2 (Mayıs 2023)

AGP 8.0.2'de düzeltilen hataların listesi için bkz. Android Studio 2022.2.1 sorunları kapatıldı.

Android Gradle Eklentisi 8.0.1 (Mayıs 2023)

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

Düzeltilen sorunlar
Hata: "Tabloda belirtilen kimliğe sahip Versiongereksinim yok" AGP 7.2.2 sürümüne geçtikten sonra -> 7.4.0
markTypeAsLive AGP 7.4.1'de R8 NullPointerException
[R8 4.0.53] Android 11'de sabit sınıf doğrulama 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. namespace DSL mülkünü kullanmaya başlayabilirsiniz AGP 7.3 ile başlayın. 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 engellenmişse testNamespace öğesini manuel olarak değiştirmeniz gerekir ve kaynak kodunuzu buna göre değiştirin.
  • Test ad alanını değiştirdikten sonra kodunuz, Ancak araçlı testleriniz çalışma zamanında başarısız olur. 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 bkz. sorun #191813691 yorum 19.

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

AGP 8.0 sürümünden itibaren, bu flag'lerin varsayılan değerleri geliştirmenizi sağlar. Kodunuzu AGP Yükseltme Asistanı'nı kullanın. (Araçlar > AGP Yükseltme Asistanı). 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. İhtiyacınız olanlar bu seçeneği, ihtiyaç duyduğunuz projelerde DSL'yi kullanarak belirtebilirsiniz.
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, şurada tanımlanan kaynaklar için R sınıf oluşturur: yalnızca geçerli modül.
android.enableR8.fullMode true false AGP 8.0, varsayılan olarak R8 tam modunu etkinleştirir. Daha fazla bilgi için bkz. R8 tam modu.

Zarar veren değişiklikler: zorunlu kılınan 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 kılınan 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, başarısız olan derlemelerde R8 kullanan derlemelerde daha iyi DEX optimizasyonu sağlar. Bu sorunu gidermek için eksik kitaplıklar veya -dontwarn saklama kuralları. 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'ı kullanabilmesini sağlar. derler.
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. Alıcı: daha fazla bilgi için Play Console için bağımlılık bilgileri.
android.enableArtProfiles true Temel profiller artık her zaman oluşturuluyor. Ayrıntılar için Temel profiller bölümüne bakın.
android.enableNewResourceShrinker true Varsayılan olarak yeni kaynak küçültme uygulamasını kullanın. Yeni kaynak daraltıcı, dinamik özellikler için destek içerir.
android.enableSourceSetPathsMap true Göreceli kaynak yolu eşlemelerini hesaplamak için kullanılır. Bu nedenle Gradle, güncel bilgiler sağlar.
android.cacheCompileLibResources true Gradle, derlenen kitaplık kaynakları artık varsayılan olarak önbelleğe alınabilir kaynak dosyalarını proje konumuna göre takip eder. Gereken android.enableSourceSetPathsMap etkinleştirilecek.
android.disableAutomaticComponentCreation true AGP 8.0 varsayılan olarak SoftwareComponent oluşturmaz. Bunun yerine AGP Yalnızca yayınlanmak üzere yapılandırılmış varyantlar için yazılım bileşenleri yayınlama DSL'sini kullanır.

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 geç özelliği ataması desteklenmiyor

Derleme komut dosyalarınızda Gradle'ın Kotlin DSL'sini kullanıyorsanız Android'in Studio ve AGP 8.0, = operatörü. Bu özellik hakkında daha fazla bilgi için sürüm notları ve belgeleri inceleyin.

Derleme Analiz Aracı görev kategorileri

Android Studio Flamingo'dan başlayarak Build Analiz Aracı'nın iki temel görevi göz önünde bulundurmaktır. 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 özel görevler sonra derleme süresine göre sıralanır. Bu sayede, derleme süresini en çok etkileyen kategoriyi kolayca öğrenebilirsiniz. Her bir kategoriyi genişletme görev listesi görüntülenir. Görevleri tek tek görüntülemek için: gruplandırma olmadan ise Gruplandırma ölçütü açılır menüsünü kullanın.

Analiz Aracı görev kategorileri derleyin.

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 getirin

Genel yapılandırmaları yapılandırmak için şuradaki yeni android bloğunu kullanın: settings.gradle dosya 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. yürütme profili bir aracın nasıl çalıştırılacağını belirler. farklı içerik seçeneklerini yürütme profillerine göz atın. 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 gerekir

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.

Android Studio'dan bağımsız AGP kullanırken JDK sürümünü JAVA_HOME ayarlanıyor ortam değişkeni veya -Dorg.gradle.java.home komut satırı seçeneği JDK 17'nin yükleme dizinine ekleyebilirsiniz.

Çözülen sorunlar

Android Gradle eklentisi 8.0.0

Çözülen Sorunlar
Android Gradle eklentisi
MergeResources görevinde kararsız derleme hatası
JavaEklentilerinConvention ve HasConvention desteği sonlandırıldı
Yeni dönüşüm 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, kullanımdan kaldırılan ConfigurationUtil.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 etkin olduğunda bile yavaş oluyor
[AGP] Oluşturulan kaynak dizini IDE modeline (Variant API) ekleme
JavaPluginConvention ve HasConvention desteği sonlandırıldı
Varsayılan olarak R8'e ignorewarnings ekleme
ProGuard dosyaları mevcut olmadığında uyar
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 androidJacoAnt yapılandırmasını oluşturmayı durdur
Bir kitaplık bileşeninde @IntDef kullanılması, aar öğesinde ek açıklamalar.zip oluşturmuyor.
ve için ortak süper tür bulunamadı
LINT_PRINT_STACKTRACE=true değerinin gradle mülk sürümünü ekleyin
AAR'ye paketlenen eski prefab eserler
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 bildiriminden sonra boş bir 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
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 kullanılmayan kaynakların kaldırılması çalışma zamanında kilitlenmeye neden oluyor
"hata ayıklama" derleme türünde varsayılan imzalama anahtarı vardır, bazılarında ise yoktur
lint modelinin ana kaynak sağlayıcısında Java dizini olarak listelenen oluşturulmuş kaynak dizin
Gradle 8.0-milestone-2 AGP'de istisnaya neden oluyor
Manifest birleştirmeyi uygulamalar ve kitaplık için optimize edin
Javadoc nesline gradle-settings-api ekleyin
AGP 7.4.0-alpha09'da javac'tan yeni "unknown enum constant"
AGP 7.4.0-alpha09, Firebase App Distribution'a yüklenmeyecek derlemeler oluşturur
Modüllerdeki lint.xml dosyası, lint görevlerinin UP-TO-DATE kontrolü için dikkate alınmaz
Android Gradle Eklentisi 7.0+ ve Android Testleri sorunu: Kaynak bulunamıyor: kimlik
ConfigurationCMakeDebug, boş işaretçi istisnasıyla düzgün çalışmayabilir
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 sürümüne güncelleme yaparken "DescriptionProcessorOptions.arguments sorgulanıyor" hatası oluştu
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 temel profilleri kırıyor
AGP 8.0'daki CheckAarMetadataTask mesajında "compileSdkVersion" değerini "compileSdk" olarak değiştirin
AGP 7.4.0-rc01, varken API'yi şu görevden önce Variant API'yi bozuyor: "Querying the eşlenen value of match(provider(java.util.Set))) before '...' görevi. tamamlandı desteklenmiyor"
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ğil
DexingFileDependenciesTask.ExitKeepRules bir dizindir ancak ÇıktıDosyası olarak işaretlenmiş
AGP 7.4'e yükseltme işlemi StackOverflowError hatasına neden oluyor
transactionDebugUnitTestManifest, 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 yeni bir Android Gradle eklentisi olmadığında "Daha yeni bir Android Gradle eklentisi kullanmanızı öneririz"
android.injected.testOnly=false çalışmıyor
Dexer (D8)
AS Canary 6'ya yükseltildikten sonra global sentetikle 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ığı kontrollerini işlemez
Sarmalanmışken InlinedApi için yanlış pozitif
openInputStream ile ilgili hata analizi geri dönüşüm analizi
[BuildTool/Lint] ChecksSdkIntAtLeast oluşturucu mülkü
Lint: KısmiResults birleştirme işlemi yanlış çalışıyor
Android Studio, belirtilen sürümü yanlış bir şekilde güncel değil olarak işaretliyor.
AndroidDeprecationInspection.DeprecationFilter EP, android-plugin.xml dosyasına hiçbir zaman kaydedilmez
AccessibilityDetector hata analizi açıklaması eski
Lint SDK_INT kontrolleri geçici yerel değişkenleri anlamalıdır
TestMode.TYPE_ALIAS, İşlev türünü typealias ile değiştirirken hata oluştu
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
görünüm kimliğinde hata gösterilmiyor
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 Regresyonu
TypedArray#close (API 31) devre dışı bırakılmadı ancak AS, "kaynaklarla deneyin" özelliğinde 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 yayınları kontrol eder, devralınan arayüzler için kontrol etmez
Lint Entegrasyonu
Temel dosya şu anda Lint görevlerinin Giriş ve Çıkışı'dır.
Küçültücü (R8)
CF çerçeve doğrulayıcıda NPE / onay hatası
Alan arama önbelleği kaldırıldıktan sonra gerileme
":app:minifyVariantWithR8" AGP 7.4.0-beta02 sürümünde 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'yi 7.3.1'den 7.4.0'a yükseltirken büyük performans düşüşü

Android Gradle eklentisi 8.0.1

Çözülen Sorunlar
Küçültücü (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: Kotlin 1.8.20 ile R8 kullanılırken doğrulayıcı sınıfı reddetti
AGP 8'deki R8, Google Fit hizmetini bozuyor
Giriş adlarıyla çakışan kalan adlara sahip kaynak dosya bilgilerinin eklenmesi, doğru bir şekilde temsil edilmiyor