Android Gradle Plugin 8.1.0 (Temmuz 2023)

Android Gradle eklentisi 8.1.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 33.0.1 33.0.1 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.

Kotlin DSL, derleme yapılandırması için varsayılandır

Yeni projelerde artık derleme yapılandırması için varsayılan olarak Kotlin DSL (build.gradle.kts) kullanılıyor. Bu, Groovy DSL'ye (build.gradle) kıyasla söz dizimi vurgulama, kod tamamlama ve bildirimlere gitme gibi özelliklerle daha iyi bir düzenleme deneyimi sunar. AGP 8.1 ve derleme yapılandırması için Kotlin DSL'yi kullanıyorsanız en iyi deneyim için Gradle 8.1'i kullanmanız gerektiğini unutmayın. Daha fazla bilgi edinmek için Kotlin DSL taşıma kılavuzuna bakın.

Uygulamaya özgü otomatik dil desteği

Android Studio Giraffe Canary 7 ve AGP 8.1.0-alpha07'den itibaren uygulamanızı uygulama başına dil tercihlerini otomatik olarak destekleyecek şekilde yapılandırabilirsiniz. Android Gradle eklentisi, proje kaynaklarınıza göre LocaleConfig dosyasını oluşturur ve son manifest dosyasına bu dosyayla ilgili bir referans ekler. Böylece, bu işlemi artık manuel olarak yapmanız gerekmez. AGP, res dosyasında hangi yerel ayarların yer alacağını belirlemek için uygulama modüllerinizin res klasörlerindeki kaynakları ve kitaplık modülü bağımlılıklarını kullanır.LocaleConfig

Uygulama başına otomatik dil özelliğinin, Android 13 (API düzeyi 33) veya sonraki sürümlerde çalışan uygulamaları desteklediğini unutmayın. Bu özelliği kullanmak için compileSdkVersion değerini 33 veya daha yüksek bir değere ayarlamanız gerekir. Android'in önceki sürümlerinde uygulamaya özgü dil tercihlerini yapılandırmak için API'leri ve uygulama içi dil seçicileri kullanmaya devam etmeniz gerekir.

Uygulama bazında otomatik dil desteğini etkinleştirmek için varsayılan bir yerel ayar belirtin:

  1. Uygulama modülünün res klasöründe resources.properties adlı yeni bir dosya oluşturun.
  2. resources.properties dosyasında, unqualifiedResLocale etiketiyle varsayılan yerel ayarı belirleyin. Yerel ayar adlarını oluşturmak için dil kodunu isteğe bağlı olarak komut dosyası ve bölge kodlarıyla birleştirin. Her bir kodu tireyle ayırın:

    • Dil: İki veya üç harfli ISO 639-1 kodunu kullanın.
    • Alfabe (isteğe bağlı): ISO 15924 kodunu kullanın.
    • Bölge (isteğe bağlı): İki harfli ISO 3166-1-alpha-2 kodu veya üç haneli UN_M.49 kodunu kullanın.

    Örneğin, varsayılan yerel ayarınız Amerikan İngilizcesi ise:

        unqualifiedResLocale=en-US
        

AGP, values-* dizinlerini kullanarak bu varsayılan yerel ayarı ve belirttiğiniz tüm alternatif yerel ayarları, otomatik olarak oluşturulan LocaleConfig dosyasına ekler.res

Uygulama bazında otomatik dil desteği varsayılan olarak devre dışıdır. Özelliği etkinleştirmek için modül düzeyindeki build.gradle.kts dosyasının (Groovy kullanıyorsanız build.gradle dosyası) androidResources {} bloğunda generateLocaleConfig ayarını kullanın:

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint, JVM 17'yi hedefleyen bayt kodu içeriyor

AGP 8.1.0-alpha04'ten itibaren Android Lint, JVM 17'yi hedefleyen bayt kodu içerir. Özel lint kontrolleri yazarsanız JDK 17 veya daha yeni bir sürümle derleme yapmanız ve Kotlin derleyici seçeneklerinizde jvmTarget = '17' belirtmeniz gerekir.

Lint aracı hakkında daha fazla bilgi edinmek için Kodunuzu lint kontrolleriyle iyileştirme başlıklı makaleyi inceleyin.

Yerel kitaplık sıkıştırma ayarı DSL'ye taşındı

AGP 8.1.0-alpha10'dan itibaren, yerel kitaplık sıkıştırmasını manifest yerine DSL kullanarak yapılandırmazsanız uyarı alırsınız. Aşağıdaki yönergelerde, yapılandırmanızı DSL'yi kullanacak şekilde nasıl güncelleyeceğiniz açıklanmaktadır. Bu güncellemeleri yapma konusunda yardım almak için AGP Yükseltme Asistanı'nı (Araçlar > AGP Yükseltme Asistanı) kullanın.

Sıkıştırılmamış yerel kitaplıkları kullanmak için manifest dosyasından android::extractNativeLibs özelliğini kaldırın ve modül düzeyindeki build.gradle.kts dosyasına (Groovy kullanıyorsanız build.gradle dosyası) aşağıdaki kodu ekleyin:

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Deneysel derleme işaretleri

Bunlar, AGP 8.1'de kullanılabilen derlemenizi yapılandırmaya yönelik deneysel işaretlerdir.

İşaretle Eklendiği yer Varsayılan değer Notlar
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Bu ayar, imzalama yapılandırmaları belirtilmeden etkinleştirildiğinde AGP, profillenebilir veya hata ayıklanabilir bir derleme çalıştırırken varsayılan hata ayıklama imzalama yapılandırmasını kullanır. Bu işaret, derleme yazarlarını belirli profil oluşturma imzalama yapılandırmalarını bildirmeye teşvik etmek için varsayılan olarak devre dışı bırakılır.
android.experimental.library.desugarAndroidTest AGP 8.0 false Bu işaret, kitaplık oluşturucuların test APK'ları için temel kitaplık desugaring'ini etkinleştirmesine olanak tanır. Bu işlem, örneğin linting aracılığıyla oluşturulan AAR'yi etkilemez. Bu davranışı ileride Variant API'de desteklemeyi planlıyoruz.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Etkinleştirilirse Gradle Managed Devices, bir eklenti tarafından sağlanabilen kullanıcı tanımlı özel cihaz türüne izin verir. Firebase Test Lab eklentisini kullanmak istiyorsanız bu işaret etkinleştirilmelidir.
android.lint.printStackTrace AGP 8.0 false Etkinleştirilirse Android lint, kilitlenmesi durumunda bir yığın izi yazdırır. Bu işaret, LINT_PRINT_STACKTRACE ortam değişkeniyle aynı işlevlere sahiptir.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Yok Herhangi bir anda etkin olacak eşzamanlı Gradle tarafından yönetilen cihazların (AVD'ler) maksimum sayısını belirtir. Değer 0 veya negatifse maksimum cihaz sayısı yoktur.
android.experimental.testOptions.installApkTimeout AGP 8.0 Yok APK yüklemek için zaman aşımı süresi (saniye cinsinden). Değer 0 veya negatifse UTP tarafından varsayılan bir değere ayarlanır.

Çözülen sorunlar

Android Gradle eklentisi 8.1.0

Çözülen Sorunlar
Android Gradle eklentisi
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
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so, APK'nın içine paketleniyor
KGP, yapılandırma sırasında manifesti okur ve manifest değiştiğinde yapılandırma önbelleğini geçersiz kılar.
Birleştirilmiş manifestte sorun olduğunda derleme uyarı mesajı net değil
AGP 7.4'e yükseltme işlemi StackOverflowError ile sonuçlanıyor
Doğrudan Kotlin kitaplığı alt projesine bağlı dinamik özellikte ClassNotFoundException
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
namespace özelliği muhtemelen HasAndroidResources'a aittir
"Gradle dosyaları, son proje senkronizasyonundan bu yana değişti" mesajı devre dışı bırakılamıyor
Daha yeni bir sürüm yokken "Daha yeni bir Android Gradle eklentisi kullanmanızı öneririz" mesajı gösteriliyor
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
CheckAarMetadataTask'te derleme SDK'sı kontrolünü devre dışı bırakmak için Boole işareti
Derleme hatası, mevcut olmayan API düzeyi 34'ü ifade ediyor
JVM araç zincirini ayarlamak, JavaCompile targetCompatibility değerini etkilemez.
Joker karakter içeren alan adlarına sahip navigasyon derin bağlantı girişleri, birleştirilmiş manifestte "android:host" özelliğine sahip değil
Android Gradle eklentisi 8.1'den beri processDebugMainManifest görevi başarısız oluyor
AnalyticsRecordingTask kaldırılabilir mi?
output-metadata.json dosyasının içeriği tutarlı değil
AnalyticsRecordingTask kaldırılabilir mi?
output-metadata.json dosyasının içeriği tutarlı değil
JVM araç zincirini ayarlamak, JavaCompile targetCompatibility değerini etkilemez.
Joker karakter içeren alan adlarına sahip navigasyon derin bağlantı girişleri, birleştirilmiş manifestte "android:host" özelliğine sahip değil
Android Gradle eklentisi 8.1'den beri processDebugMainManifest görevi başarısız oluyor
Android Studio, STUDIO_GRADLE_JDK ortam değişkenine uymuyor
Özel kaynak türleri, çok formatlı kaynak kümeleri oluşturmalıdır.
DependenciesInfoBuilder için API güncellemesi ve doküman gerekiyor
Java 11 hedefiyle DexingNoClasspathTransform (minSdk >= 24) işlemi, iç içe yerleştirilmiş üyeler eksik olduğundan başarısız oluyor
DslExtension.Builder.extendProjectWith() işlevi, Groovy'de belirtildiği gibi çalışmıyor
kotlin.Pair kullanmayan VariantSelector.withFlavor API'sini ekleyin
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) has a cache miss because `proguard.txt` has changed
Uygulama birleştirilmiş manifesti, bağımlılıklardan extractNativeLibs ve useEmbeddedDex özelliklerini içeriyor
AGP: AIDL aracının ve çerçeve AIDL dosyasının yolunu herkese açık API olarak kullanıma sunma
İstek: IDE, "PermittedSubclasses requires ASM9" hatası için düzeltme önerisinde bulunsun.
Hata: "Enable KSP and use the KSP processor for this dependency instead" (KSP'yi etkinleştirin ve bu bağımlılık için bunun yerine KSP işlemcisini kullanın) yalnızca bir web sitesine yönlendiriyor
Gradle 8.1, .gradle/.android/analytics.settings nedeniyle yapılandırma önbelleğe almayı bozuyor
AGP 8.1.0'daki generateLocaleConfig, tekrarlanabilir derlemeleri bozan, deterministik olmayan bir sıralama kullanıyor
Dexer (D8)
Core Library Desugaring, son güncellemelerden sonra uygulamanın kilitlenmesine neden oluyor.
agp 8.1.0 regression with API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
Lint
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, arama alıcıları için geçerli yayınları kontrol etmiyor
TypedArray#close (API 31) yöntemi, desugared edilmiyor ancak try-with-resources içinde kullanıldığında AS uyarı göstermiyor
Hata: "BC sağlayıcısının desteği sonlandırıldı ve Android P'den itibaren..." şeklinde yanlış pozitif uyarı
Kotlin 1.8.0'a yükseltildikten sonra remember ile ilgili yanlış pozitif Lint hatası
Enum parametresi olan bir yöntemde gerçekleştirilen SDK_INT kontrolleri için yanlış pozitif Lint uyarısı
TypographyQuotes lint kontrolü, kaçış karakteri eklenmiş tırnak işaretlerinde çalışmıyor
TrustAllX509TrustManager lint kontrolü, X509TrustManager'ı genişleten arayüzleri yanlışlıkla işaretliyor
Yalnızca değiştirme düzeltmesinin eklenen kodunu yeniden biçimlendirme
Lint: intention preview throws exception for ReplaceStringQuickFix
Shrinker (R8)
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.
R8, Compose derlemesi sırasında ArrayIndexOutOfBoundsException ile başarısız oluyor
Simple StringBuilder ile ilgili kodda, yayın veya debuggable=false modunda ekleme için kuyruk çağrısı eksik
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() yöntemindeki bir köşe durumu
dex-startup-optimization, java.lang.VerifyError: Rejecting class hatasına neden oluyor
Android 12 ve sonraki sürümlerde doğrulama hatasıyla kilitlenme

Android Gradle eklentisi 8.1.1

Çözülen Sorunlar
Dexer (D8)
Java 16 Kayıtları: equals(null) NullPointerException oluşturuyor
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Apache POI kitaplığı kullanılırken derleme, :minifyReleaseWithR8 adımında takılıyor
R8 optimizasyonu etkinleştirildiğinde çağırmayı reddetme
java.lang.reflect.Executable için NoClassDefFoundError

Android Gradle eklentisi 8.1.2

Çözülen Sorunlar
Android Gradle eklentisi
androidResources, Android kitaplık modülünde kullanılamaz
[AGP 8.1.0] Hem splits.abi.isEnable hem de testOptions.unitTests.isIncludeAndroidResources doğruysa ./gradlew test, "Unable to find manifest output" (Manifest çıkışı bulunamadı) hatasıyla başarısız oluyor
Shrinker (R8)
Kotlin 1.9, null denetimleri kaldırılırsa Kotlin lambda'larının R8 tarafından yok edilmesine neden oluyor
R8, play-services-measurement-21.3.0-runtime.jar için "Derleme sırasında tanımlanmamış değerle karşılaşıldı" hatasıyla başarısız oluyor

Android Gradle eklentisi 8.1.3

Çözülen Sorunlar
Android Gradle eklentisi
[AGP 8.1.0] Hem splits.abi.isEnable hem de testOptions.unitTests.isIncludeAndroidResources doğruysa ./gradlew test, "Unable to find manifest output" (Manifest çıkışı bulunamadı) hatasıyla başarısız oluyor
AGP 8.1'e güncelleme yapıldıktan sonra derleme hatası

Android Gradle eklentisi 8.1.4

Çözülen Sorunlar
Android Gradle eklentisi
Alt projelerin sınıfları, yapay nesne dönüşümleri aracılığıyla zaten dex'e dönüştürülmüşse bu sınıflarda dexing görevini çalıştırmayın.