Android Gradle Eklentisi 7.0.0 (Temmuz 2021)
Android Gradle eklentisi 7.0.0, çeşitli yeni özellikler ve iyileştirmeler içeren önemli bir sürümdür.
7.0.1 (Ağustos 2021)
Bu küçük güncelleme çeşitli hata düzeltmeleri içerir. Önemli hata düzeltmelerinin listesini görmek için Release Updates blogundaki ilgili yayını okuyun.
Uyumluluk
Minimum sürüm | Varsayılan sürüm | Notlar | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | Daha fazla bilgi edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin. |
SDK Build Tools | 30.0.2 | 30.0.2 | SDK oluşturma araçlarını yükleyin veya yapılandırın. |
NDK | Yok | 21.4.7075529 | NDK'nın farklı bir sürümünü yükleyin veya yapılandırın. |
JDK | 11 | 11 | Daha fazla bilgi için JDK sürümünü ayarlama konusuna bakın. |
AGP 7.0'ı çalıştırmak için JDK 11 gerekir
Uygulamanızı oluşturmak için Android Gradle eklentisi 7.0'ı kullanırken Gradle'ı çalıştırmak için artık JDK 11 gereklidir. Android Studio Arctic Fox, JDK 11'i 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 11 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 11'in yükleme dizininize ayarlayarak JDK sürümünü yükseltin.
Kullanımdan kaldırılan SDK Tools paketindeki SDK Manager ve AVD Manager'ın JDK 11 ile çalışmadığını unutmayın. AGP 7.0 ve sonraki sürümlerde SDK Manager ve AVD Manager'ı kullanmaya devam etmek için mevcut Android SDK Command-Line Tools paketindeki araçların yeni sürümlerine geçmeniz gerekir.
Variant API kararlı sürümü
Yeni Variant API artık kararlı. com.android.build.api.variant paketindeki yeni arayüzlere ve gradle-recipes GitHub projesindeki örneklere göz atın. Yeni Variant API kapsamında, Artifacts arayüzü üzerinden, yapılar adı verilen bir dizi ara dosya kullanıma sunduk. Birleştirilmiş manifest gibi bu yapılar, üçüncü taraf eklentileri ve kodu kullanılarak güvenli bir şekilde elde edilebilir ve özelleştirilebilir.
Yeni işlevler ekleyerek ve özelleştirme için sunduğumuz ara yapay nesnelerin sayısını artırarak Variant API'yi genişletmeye devam edeceğiz.
Lint'teki davranış değişiklikleri
Bu bölümde, Android Gradle eklentisi 7.0.0'daki çeşitli Lint davranış değişiklikleri açıklanmaktadır.
Kitaplık bağımlılıkları için iyileştirilmiş lint
checkDependencies = true
ile lint çalıştırmak artık daha hızlı. Kitaplık bağımlılıklarına sahip bir uygulamadan oluşan Android projelerinde, checkDependencies
değerinin aşağıda gösterildiği gibi true
olarak ayarlanması ve lint'in ./gradlew :app:lint
üzerinden çalıştırılması önerilir. Bu işlem, tüm bağımlılık modüllerini paralel olarak analiz eder ve uygulamadaki sorunlar ile tüm bağımlılıklarındaki sorunları içeren tek bir rapor oluşturur.
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Lint görevleri artık UP-TO-DATE olabilir
Bir modülün kaynakları ve kaynakları değişmediyse modülün lint analizi görevinin tekrar çalıştırılması gerekmez. Bu durumda, görevin yürütülmesi Gradle çıkışında "UP-TO-DATE" (GÜNCEL) olarak görünür. Bu değişiklikle birlikte, checkDependencies = true
içeren bir uygulama modülünde lint çalıştırıldığında yalnızca değişen modüllerin analizlerini çalıştırması gerekecek. Bu sayede Lint daha da hızlı çalışabilir.
Girişleri değişmediyse Lint raporu görevinin de çalıştırılması gerekmez. İlgili bir bilinen sorun, lint görevi UP-TO-DATE olduğunda stdout'a lint metin çıkışı yazdırılmamasıdır (191897708 numaralı sorun).
Dinamik özellik modüllerinde lint çalıştırma
AGP artık lint'i dynamic-feature modüllerinden çalıştırmayı desteklemiyor.
Lint'i ilgili uygulama modülünden çalıştırmak, dinamik özellik modüllerinde lint'i çalıştırır ve uygulamadaki tüm sorunları lint raporuna dahil eder. Bununla ilgili bir bilinen sorun da lint'i bir uygulama modülünden checkDependencies = true
ile çalıştırırken dinamik özellik kitaplığı bağımlılıklarının uygulama bağımlılıkları da olmadıkları sürece kontrol edilmemesidir (sorun
#191977888).
Yalnızca varsayılan varyantta lint çalıştırma
./gradlew :app:lint
komutu artık yalnızca varsayılan varyant için lint çalıştırır. AGP'nin önceki sürümlerinde, tüm varyantlar için lint çalıştırılıyordu.
R8 küçültücüsünde eksik sınıf uyarıları
R8, eksik sınıfları ve -dontwarn
seçeneğini daha hassas ve tutarlı bir şekilde işler.
Bu nedenle, R8 tarafından verilen eksik sınıf uyarılarını değerlendirmeye başlamanız gerekir.
R8, uygulamanızda veya bağımlılıklarından birinde tanımlanmamış bir sınıf referansıyla karşılaştığında derleme çıktınızda görünen bir uyarı verir. Örneğin:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Bu uyarı, uygulamanızın kodu analiz edilirken java.lang.instrument.ClassFileTransformer
sınıf tanımının bulunamadığı anlamına gelir. Bu durum genellikle bir hata olduğu anlamına gelse de bu uyarıyı yoksaymak isteyebilirsiniz. Uyarıyı dikkate almamanın iki yaygın nedeni vardır:
-
JVM'yi hedefleyen ve eksik sınıfı içeren kitaplıklar, JVM kitaplık türündedir (yukarıdaki örnekte olduğu gibi).
-
Bağımlılıklarınızdan biri yalnızca derleme zamanında kullanılan bir API kullanıyor.
-dontwarn
dosyanıza proguard-rules.pro
kuralı ekleyerek eksik sınıf uyarısını yoksayabilirsiniz. Örneğin:
-dontwarn java.lang.instrument.ClassFileTransformer
AGP, kolaylık sağlamak için olası tüm eksik kuralları içeren bir dosya oluşturur ve bunları aşağıdaki gibi bir dosya yoluna yazar:
app/build/outputs/mapping/release/missing_rules.txt
. Uyarıları yoksaymak için proguard-rules.pro
dosyanıza kuralları ekleyin.
AGP 7.0'da eksik sınıf mesajları uyarı olarak görünür ve android.r8.failOnMissingClasses = true
ayarını gradle.properties
olarak belirleyerek bunları hataya dönüştürebilirsiniz. AGP 8.0'da bu uyarılar, derlemenizi bozan hatalara dönüşecek. -ignorewarnings
seçeneğini proguard-rules.pro
dosyanıza ekleyerek AGP 7.0 davranışını koruyabilirsiniz ancak bu önerilmez.
Android Gradle eklentisi derleme önbelleği kaldırıldı
AGP 4.1'de AGP derleme önbelleği kaldırıldı. Gradle derleme önbelleğini tamamlamak için daha önce AGP 2.3'te kullanıma sunulan AGP derleme önbelleği, AGP 4.1'de tamamen Gradle derleme önbelleği ile değiştirildi. Bu değişiklik, derleme süresini etkilemez.
AGP 7.0'da android.enableBuildCache
özelliği, android.buildCacheDir
özelliği ve cleanBuildCache
görevi kaldırıldı.
Projenizde Java 11 kaynak kodunu kullanma
Artık uygulamanızın projesinde Java 11 kaynak koduna kadar derleme yapabilir, böylece özel arayüz yöntemleri, anonim sınıflar için elmas operatörü ve lambda parametreleri için yerel değişken söz dizimi gibi daha yeni dil özelliklerini kullanabilirsiniz.
Bu özelliği etkinleştirmek için compileOptions
ayarını istediğiniz Java sürümüne, compileSdkVersion
ayarını ise 30 veya daha yüksek bir değere ayarlayın:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
Bağımlılık yapılandırmaları kaldırıldı
AGP 7.0'da aşağıdaki yapılandırmalar (veya bağımlılık kapsamları) kaldırıldı:
-
compile
Kullanım alanına bağlı olarak bu özelliğin yeriniapi
veyaimplementation
almıştır.
*Derleme varyantları için de geçerlidir. Örneğin:debugCompile
. -
provided
Bu,compileOnly
ile değiştirildi.
*Sağlanan varyantlar için de geçerlidir. Örneğin:releaseProvided
. -
apk
Bu,runtimeOnly
ile değiştirildi. -
publish
Bu,runtimeOnly
ile değiştirildi.
Çoğu durumda, AGP Yükseltme Asistanı projenizi yeni yapılandırmalara otomatik olarak taşır.
Android Gradle eklentisine karşı derleme yapılırken sınıf yolu değişikliği
Android Gradle eklentisine karşı derleme yapıyorsanız derleme sınıf yolunuz değişebilir. AGP artık dahili olarak api/implementation
yapılandırmalarını kullandığından bazı yapılar derleme sınıf yolunuzdan
kaldırılabilir. Derleme zamanında bir AGP bağımlılığını kullanıyorsanız bunu açık bir bağımlılık olarak eklediğinizden emin olun.
Java kaynakları klasörüne yerel kitaplık ekleme desteklenmez.
Daha önce, bir Java kaynakları klasörüne yerel kitaplık ekleyebiliyor ve klasörü android.sourceSets.main.resources.srcDirs
kullanarak kaydedebiliyordunuz. Böylece yerel kitaplık çıkarılıp nihai APK'ya ekleniyordu. AGP 7.0'dan itibaren bu özellik desteklenmez ve Java kaynakları klasöründeki yerel kitaplıklar yoksayılır. Bunun yerine, yerel kitaplıklar için tasarlanan DSL yöntemini kullanın: android.sourceSets.main.jniLibs.srcDirs
. Daha fazla bilgi için kaynak kümelerini yapılandırma başlıklı makaleyi inceleyin.
Bilinen sorunlar
Bu bölümde, Android Gradle eklentisi 7.0.0'da bilinen sorunlar açıklanmaktadır.
1.4.x Kotlin Multiplatform eklentisiyle uyumsuzluk
Android Gradle eklentisi 7.0.0, Kotlin Multiplatform eklentisi 1.5.0 ve sonraki sürümlerle uyumludur. Kotlin Multiplatform desteğini kullanan projelerin, Android Gradle Plugin 7.0.0'ı kullanmak için Kotlin 1.5.0'a güncellenmesi gerekir. Geçici bir çözüm olarak Android Gradle eklentisini 4.2.x sürümüne düşürebilirsiniz ancak bu işlem önerilmez.
Daha fazla bilgi için KT-43944 numaralı makaleye bakın.
Lint çıkışı eksik
Lint görevi güncel olduğunda stdout'a lint metin çıkışı yazdırılmıyor (191897708 numaralı sorun). Daha fazla bilgi için Lint ile ilgili davranış değişiklikleri başlıklı makaleyi inceleyin. Bu sorun, Android Gradle eklentisi 7.1 sürümünde düzeltilecektir.
Tüm dinamik özellik kitaplığı bağımlılıkları lint denetiminden geçirilmez
Lint, bir uygulama modülünden checkDependencies = true
ile çalıştırıldığında, dinamik özellik kitaplığı bağımlılıkları aynı zamanda uygulama bağımlılıkları olmadıkları sürece kontrol edilmez (191977888 numaralı sorun).
Geçici çözüm olarak, bu kitaplıklarda lint görevi çalıştırılabilir. Daha fazla bilgi için Lint ile ilgili davranış değişiklikleri başlıklı makaleyi inceleyin.