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üncellemede çeşitli hata düzeltmeleri mevcuttur. Önemli hata düzeltmelerinin listesini görmek için Sürüm Güncellemeleri 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 için Gradle'i güncelleme başlıklı makaleyi inceleyin. |
SDK Oluşturma Araçları | 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 başlıklı makaleyi inceleyin. |
AGP 7.0'ı çalıştırmak için JDK 11 gerekir
Uygulamanızı derlemek için Android Gradle eklentisi 7.0'ı kullanırken Gradle'i çalıştırmak için artık JDK 11 gereklidir. Android Studio Arctic Fox, JDK 11'i 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 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.
Desteği sonlandırılan SDK Tools paketindeki SDK Yöneticisi ve AVD Yöneticisi'nin JDK 11 ile çalışmadığını unutmayın. SDK Yöneticisi ve AVD Yöneticisi'ni AGP 7.0 ve sonraki sürümlerde kullanmaya devam etmek için mevcut Android SDK Komut Satırı Araçları paketindeki araçların yeni sürümlerine geçmeniz gerekir.
Variant API kararlı
Yeni Variant API artık kararlı. com.android.build.api.variant paketindeki yeni arayüzlere ve gradle-recipes GitHub projesindeki örneklere bakın. Yeni Variant API kapsamında, Artifacts arayüzü aracılığıyla yapı olarak adlandırılan bir dizi ara dosya kullanıma sunduk. Birleştirilmiş manifest gibi bu yapı taş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 kullanıma sunduğumuz ara yapıların sayısını artırarak Variant API'yi genişletmeye devam edeceğiz.
Lint'te davranış değişiklikleri
Bu bölümde, Android Gradle eklentisi 7.0.0'daki birden fazla Lint davranışı değişikliği açıklanmaktadır.
Kitaplık bağımlılıkları için iyileştirilmiş lint
checkDependencies = true
ile lint çalıştırma işlemi artık eskisinden daha hızlı. Kitaplık bağımlılıklarına sahip bir uygulamadan oluşan Android projeleri için checkDependencies
'ü aşağıda gösterildiği gibi true
olarak ayarlamak ve ./gradlew :app:lint
aracılığıyla lint çalıştırmak önerilir. Bu işlem, tüm bağımlılık modüllerini paralel olarak analiz eder ve uygulamadaki ve 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 GÜNCEL olabilir
Bir modülün kaynakları ve kaynakları değişmediyse modül için lint analizi görevinin tekrar çalıştırılmasına gerek yoktur. Bu durumda, Gradle çıkışında görevin yürütümü "UP-TO-DATE" (GÜNCEL) olarak görünür. Bu değişiklikle birlikte, checkDependencies = true
ile bir uygulama modülünde lint çalıştırıldığında yalnızca değişen modüllerin analizini çalıştırması gerekecek. Sonuç olarak Lint daha da hızlı çalışabilir.
Girişleri değişmediyse lint raporu görevinin de çalıştırılmasına gerek yoktur. İlgili bir bilinen sorun, lint görevi UP-TO-DATE olduğunda stdout'a hiçbir lint metni çıkışının yazdırılmamasıdır (sorun numarası: 191897708).
Dinamik özellik modüllerinde lint çalıştırma
AGP artık dinamik özellik modüllerinden lint çalıştırmayı desteklemiyor.
İlgili uygulama modülünden lint çalıştırıldığında, dinamik özellik modüllerinde lint çalıştırılır ve tüm sorunlar uygulamanın lint raporuna dahil edilir. İlgili bir bilinen sorun, bir uygulama modülünden checkDependencies = true
ile lint çalıştırıldığında, dinamik özellik kitaplığı bağımlılıklarının uygulama bağımlılıkları da olmadıkları sürece kontrol edilmemesidir (sorunu #191977888).
Yalnızca varsayılan varyantta lint çalıştırma
./gradlew :app:lint
çalıştırıldığında artık yalnızca varsayılan varyant için lint çalıştırılır. AGP'nin önceki sürümlerinde, tüm varyantlar için lint çalıştırılırdı.
R8 sıkıştırıcısında sınıf uyarıları eksik
R8, eksik sınıfları ve -dontwarn
seçeneğini daha doğru ve tutarlı bir şekilde işler.
Bu nedenle, R8 tarafından gönderilen 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 çıkışınızda görünen bir uyarı verir. Örnek:
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 genellikle bir hata olduğu anlamına gelir ancak bu uyarıyı yoksaymak isteyebilirsiniz. Uyarıyı göz ardı etmenin yaygın iki nedeni şunlardır:
-
JVM'yi ve eksik sınıfı hedefleyen 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 çalışan bir API kullanıyor.
proguard-rules.pro
dosyanıza -dontwarn
kural ekleyerek sınıf eksikliği uyarısını yoksayabilirsiniz. Örnek:
-dontwarn java.lang.instrument.ClassFileTransformer
AGP, kolaylık sağlamak için eksik olabilecek tüm 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ın yoksayılması için kuralları proguard-rules.pro
dosyanıza ekleyin.
AGP 7.0'da, sınıf mesajları eksikse uyarı olarak görünür. Bu uyarıları, gradle.properties
bölümünde android.r8.failOnMissingClasses = true
değerini ayarlayarak hataya dönüştürebilirsiniz. AGP 8.0'da bu uyarılar, derlemenizi bozan hatalara dönüşecek. proguard-rules.pro
dosyanıza -ignorewarnings
seçeneğini 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ı. Daha önce Gradle derleme önbelleğini tamamlamak için 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
mülkü, android.buildCacheDir
mülkü ve cleanBuildCache
görevi kaldırıldı.
Projenizde Java 11 kaynak kodunu kullanma
Artık uygulamanızın projesinde Java 11'e kadar kaynak kodu derleyebilirsiniz. Bu sayede, ö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
değerini istediğiniz Java sürümüne, compileSdkVersion
değerini 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ılmıştır:
-
compile
Kullanım alanına bağlı olarak bu,api
veyaimplementation
ile değiştirilmiştir.
*Derle varyantları için de geçerlidir (ör.debugCompile
). -
provided
Bu,compileOnly
ile değiştirildi.
*Sağlanan varyantlar için de geçerlidir (ör.releaseProvided
). -
apk
Bu,runtimeOnly
ile değiştirildi. -
publish
Bu,runtimeOnly
ile değiştirildi.
Çoğu durumda AGP Yükseltme Asistanı, projenizi otomatik olarak yeni yapılandırmalara taşır.
Android Gradle eklentisine göre derleme yaparken sınıf yolu değişikliği
Android Gradle eklentiyle derliyorsanız derleme sınıf yolu değişebilir. AGP artık dahili olarak api/implementation
yapılandırmalarını kullandığından bazı yapı taşları derleme sınıf yolunuzdan kaldırılabilir. Derleme sırasında bir AGP bağımlılığına ihtiyaç duyuyorsanız bunu açık bir bağımlı olarak eklediğinizden emin olun.
Java kaynak klasörüne yerel kitaplık ekleme işlemi desteklenmez.
Daha önce, bir Java kaynak klasörüne yerel kitaplık ekleyebilir ve yerel kitaplığın çıkarılıp nihai APK'ya eklenmesi için klasörü android.sourceSets.main.resources.srcDirs
kullanarak kaydedebiliyordunuz. AGP 7.0'dan itibaren bu yöntem desteklenmez ve Java kaynak klasöründeki yerel kitaplıklar yoksayılır. Bunun yerine, yerel kitaplıklar için tasarlanmış DSL yöntemini (android.sourceSets.main.jniLibs.srcDirs
) kullanın. Daha fazla bilgi için kaynak gruplarını yapılandırma bölümüne bakın.
Bilinen sorunlar
Bu bölümde, Android Gradle eklentisi 7.0.0'da bulunan bilinen sorunlar açıklanmaktadır.
1.4.x Kotlin Multiplatform eklentisiyle uyumsuzluk
Android Gradle eklentisi 7.0.0, Kotlin Çoklu Platform eklentisi 1.5.0 ve sonraki sürümlerle uyumludur. Android Gradle Plugin 7.0.0'ı kullanmak için Kotlin Çok Platformlu Destek kullanan projelerin 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 önerilmez.
Daha fazla bilgi için KT-43944 konusuna bakın.
Eksik lint çıkışı
Lint görevi güncelken stdout'a lint metni çıkışı yazdırılmaz (sorun numarası: 191897708). Daha fazla bilgi için Lint için davranış değişiklikleri başlıklı makaleyi inceleyin. Bu sorun, Android Gradle eklentisi 7.1'de düzeltilecektir.
Tüm dinamik özellik kitaplığı bağımlılıkları lint denetiminden geçmez
Bir uygulama modülünden checkDependencies = true
ile lint çalıştırıldığında, dinamik özellik kitaplığı bağımlılıkları, uygulama bağımlılıkları da olmadıkları sürece kontrol edilmez (sorun #191977888).
Geçici çözüm olarak, bu kitaplıklarda lint görevi çalıştırılabilir. Daha fazla bilgi için Lint için davranış değişiklikleri başlıklı makaleyi inceleyin.