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

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

Yeni projelerde artık derleme yapılandırması için varsayılan olarak Kotlin DSL (build.gradle.kts) kullanılıyor. Söz dizimi vurgulama, kod tamamlama ve açıklamalara gezinme özellikleri sayesinde Groovy DSL'den (build.gradle) daha iyi bir düzenleme deneyimi sunar. Derleme yapılandırması için AGP 8.1 ve Kotlin DSL kullanıyorsanız en iyi deneyim için Gradle 8.1'i kullanmanız gerektiğini unutmayın. Daha fazla bilgi 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 dosyaya referans ekler. Böylece artık bunu manuel olarak yapmanız gerekmez. AGP, LocaleConfig dosyasına eklenecek yerel ayarları belirlemek için uygulama modüllerinizin res klasörlerindeki kaynakları ve tüm kitaplık modülü bağımlılıklarını kullanır.

Uygulama başına otomatik dil özelliğinin Android 13 (API düzeyi 33) veya sonraki sürümleri çalıştıran 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 başına 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, varsayılan yerel ayarı unqualifiedResLocale etiketiyle ayarlayın. Yerel ayar adlarını oluşturmak için dil kodunu, isteğe bağlı yazı ve bölge kodlarıyla birleştirin. Her birini kısa çizgiyle 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 kodundan veya üç haneli UN_M.49 kodundan birini kullanın.

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

        unqualifiedResLocale=en-US
        

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

Uygulama başına 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ğundaki 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

Android Lint, AGP 8.1.0-alpha04'ten itibaren JVM 17'yi hedefleyen bayt kodu içerir. Özel lint kontrolleri yazıyorsanız JDK 17 veya sonraki bir sürümle derlemeniz 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 kılavuzda, 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ış doğal 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ına) 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 derlemenizi yapılandırmanıza olanak tanıyan deneysel işaretlerdir.

İşaretle Eklenme tarihi Varsayılan değer Notlar
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Bu özelliği, imzalama yapılandırması belirtilmeden etkinleştirmek, AGP'nin profillenebilir veya hata ayıklama yapılabilir bir derleme çalıştırırken varsayılan hata ayıklama imzalama yapılandırmasını kullanmasına neden olur. Bu işaret, derleme yazarlarını belirli profil oluşturma imzalama yapılandırmalarını belirtmeye teşvik etmek için varsayılan olarak devre dışıdır.
android.experimental.library.desugarAndroidTest AGP 8.0 false Bu işaret, kitaplık derleyicilerinin, üretilen AAR'ı etkilemeden (ör. linting aracılığıyla) test APK'ları için temel kitaplık şekerleme kaldırma özelliğini etkinleştirmesine olanak tanır. Bu davranışı ileride Variant API'de desteklemeyi planlıyoruz.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Etkinleştirilirse Gradle Yönetilen Cihazlar, kullanıcı tarafından tanımlanan ve bir eklenti tarafından sağlanabilen özel bir cihaz türüne izin verir. Firebase Test Lab eklentisini kullanmak istiyorsanız bu işaret etkin olmalıdır.
android.lint.printStackTrace AGP 8.0 false Etkinleştirilirse Android lint, kilitlenme olursa bir yığın izleme yazdırır. Bu işaret, LINT_PRINT_STACKTRACE ortam değişkeniyle aynı özelliklere sahiptir.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Yok Herhangi bir zamanda etkin olacak maksimum eşzamanlı Gradle Managed Device (AVD) sayısını belirtir. Değer 0 veya negatifse maksimum cihaz sayısı yoktur.
android.experimental.testOptions.installApkTimeout AGP 8.0 Yok APK yükleme için saniye cinsinden zaman aşımı süresi. Değer 0 veya negatif ise 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 yapmak yapılandırma önbelleğini bozar
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so, APK'nın içine paketlenmiştir
KGP, yapılandırma sırasında manifest'i okur ve manifest değişikliğinde yapılandırma önbelleğini geçersiz kılar
Birleştirilmiş manifest'te sorun olduğunda belirsiz yapı uyarı mesajı
AGP 7.4'e yükseltme işlemi, StackOverflowError hatasına neden oluyor
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 mülkü muhtemelen HasAndroidResources özelliğine aittir.
"Gradle dosyaları son proje senkronizasyonundan bu yana değişti" mesajı devre dışı bırakılamıyor
Daha yenisi olmadığında "Daha yeni bir Android Gradle eklentisi kullanmanızı öneririz"
processDebugUnitTestManifest, test varyantları için manifest yer tutucularıyla başarısız oluyor
CheckAarMetadataTask'ta derleme SDK kontrolünü devre dışı bırakmak için Boole işareti
Derleme hatası, mevcut olmayan API düzeyi 34'e işaret ediyor
JVM araç setini ayarlamak, JavaCompile targetCompatibility değerini etkilemez
Joker karakter içeren alan adlarına sahip navigasyon derin bağlantı girişlerinde, birleştirilmiş manifest dosyasında "android:host" özelliği yok
Android Gradle eklentisi 8.1'den beri processDebugMainManifest görevi başarısız oluyor
AnalyticsRecordingTask'ı kaldırabilir miyiz?
output-metadata.json dosyasının içeriği tutarlı değil
AnalyticsRecordingTask'ı kaldırabilir miyiz?
output-metadata.json dosyasının içeriği tutarlı değil
JVM araç setini ayarlamak, JavaCompile targetCompatibility değerini etkilemez
Joker karakter içeren alan adlarına sahip navigasyon derin bağlantı girişlerinde, birleştirilmiş manifest dosyasında "android:host" özelliği yok
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, birden çok çeşide sahip kaynak kümeleri oluşturmalıdır
DependenciesInfoBuilder için API güncellemesi ve doküman gerekiyor
Java 11 hedefi ile DexingNoClasspathTransform (minSdk >= 24) eksik iç içe yerleştirilmiş üyeler nedeniyle başarısız oluyor
DslExtension.Builder.extendProjectWith(), Groovy'da açıklandığı gibi çalışmıyor
kotlin.Pair kullanmayan VariantSelector.withFlavor API'sini ekleyin
"proguard.txt" değiştiği için AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) önbelleği kaçırıldı
Uygulamanın birleştirilmiş manifest dosyasında, bağımlılıklardan extractNativeLibs ve useEmbeddedDex özellikleri yer alıyor
AGP: AIDL aracının ve çerçeve AIDL dosyasının yolunu herkese açık API olarak gösterme
İstek: IDE'nin "PermittedSubclasses requires ASM9" hatası için bir çözüm sunması
Hata: "KSP'yi etkinleştirin ve bu bağımlılık için KSP işlemcisini kullanın" seçeneği yalnızca bir web sitesine yönlendiriyor
Gradle 8.1, .gradle/.android/analytics.settings nedeniyle yapılandırma önbelleğe alma işlemini bozuyor
agp 8.1.0'daki generateLocaleConfig, yeniden üretilebilir derlemeleri bozan, kesin olmayan sıralama kullanır
Dexer (D8)
Core library desugaring crashing app after recent updates.
API 21 ile agp 8.1.0 gerileme - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Kontrol başarısız oldu: !method->IsAbstract()
Lint
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, arama alıcıları için geçerli yayınlamayı kontrol etmiyor
TypedArray#close (API 31) şeker içermeyen hale getirilmedi ancak AS, try-with-resources içinde kullanıldığında uyarı göstermiyor
Hata: ""BC" sağlayıcı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 lint yanlış pozitifi
enum parametresi içeren bir yöntemde gerçekleştirilen SDK_INT kontrolleri için yanlış pozitif Lint uyarısı
TypographyQuotes lint denetimi, kaçış karakteri içeren tırnak işaretlerinde çalışmıyor
TrustAllX509TrustManager lint kontrolü, X509TrustManager'ı genişleten arayüzleri yanlış şekilde işaretliyor
Değişim düzeltmesinin yalnızca eklenen kodunu yeniden biçimlendirme
Lint: intention preview throws exception for ReplaceStringQuickFix
Shrinker (R8)
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 edilmemiştir
R8, ArrayIndexOutOfBoundsException ile Compose derlemesi sırasında başarısız oluyor
SimpleStringBuilder ile ilgili kod, yayın veya hata ayıklanabilir=false modunda eklemek için son çağrıyı kaçırıyor
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() yöntemindeki uç durum
dex-startup-optimization, java.lang.VerifyError ile sonuçlanıyor: Sınıf reddediliyor
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 hatası veriyor
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Apache POI kitaplığı kullanıldığında derleme, :minifyReleaseWithR8'de takılıyor
r8 optimize etkinleştirildiğinde çağrı reddediliyor
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 "Manifest çıkışı bulunamadı" hatasıyla başarısız oluyor
Shrinker (R8)
Kotlin 1.9, null kontrollerinin kaldırılması durumunda Kotlin lambdaları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 "Manifest çıkışı bulunamadı" hatasıyla başarısız oluyor
AGP 8.1'e güncelleme sonrası derleme hatası

Android Gradle eklentisi 8.1.4

Çözülen Sorunlar
Android Gradle eklentisi
Alt projelerin sınıfları, yapı dönüştürme işlemleri aracılığıyla zaten dex'lenmişse sınıfları dex'leme görevini çalıştırmayın