Android Gradle Plugin 7.0.0 (Temmuz 2021)
Android Gradle eklentisi 7.0.0, çeşitli yeni özellikler ve iyileştirmeler içeren ana sürümdür.
7.0.1 (Ağustos 2021)
Bu küçük güncelleme, çeşitli hata düzeltmelerini içerir. Ö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 | |
---|---|---|
Gradle | 7.0.2 | 7.0.2 |
SDK Oluşturma Araçları | 30.0.2 | 30.0.2 |
400 | Yok | 21.4.7075529 |
JDK | 11 | 11 |
AGP 7.0'ı çalıştırmak için JDK 11 gerekir
Uygulamanızı derlemek için Android Gradle eklentisi 7.0 kullanılırken Gradle'ı çalıştırmak için artık JDK 11 gerekiyor. Android Studio Arctic Fox, JDK 11'i paketler ve Gradle'ı varsayılan olarak kullanacak şekilde yapılandırır. Böylece çoğu Android Studio kullanıcısının projelerinde herhangi bir yapılandırma değişikliği yapması gerekmez.
AGP tarafından kullanılan JDK sürümünü Android Studio içinde 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 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. SDK Manager'ı ve AVD Manager'ı AGP 7.0 ve sonraki sürümleriyle kullanmaya devam etmek için mevcut Android SDK Komut Satırı Araçları paketindeki araçların yeni sürümlerine geçmeniz gerekiyor.
Variant API kararlı
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'nin bir parçası olarak Artifacts arayüzü üzerinden yapı adı verilen birçok ara dosya kullanıma sunduk. Birleştirilmiş manifest gibi bu yapılar, üçüncü taraf eklentileri ve kodu kullanılarak güvenli bir şekilde elde edilip ö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 ile ilgili davranış değişiklikleri
Bu bölümde, Android Gradle eklentisi 7.0.0'da yapılan birden fazla Lint davranışı değişikliği açıklanmaktadır.
Kitaplık bağımlılıkları için iyileştirilmiş hata analizi
checkDependencies = true
ile lint çalıştırmak artık eskisinden daha hızlı. Kitaplık bağımlılıkları olan bir uygulama içeren Android projelerinde, aşağıda gösterildiği gibi checkDependencies
öğesinin true
olarak ayarlanması ve ./gradlew :app:lint
aracılığıyla lint çalıştırmanız ö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ını içeren tek bir rapor oluşturur.
Modern
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Lint görevleri artık GÜNCEL olabilir
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" olarak görünür. Bu değişiklikle birlikte, checkDependencies = true
içeren bir uygulama modülünde lint çalıştırırken yalnızca değiştirilmiş modüllerin analizini çalıştırması gerekecek. Sonuç olarak Lint, daha da hızlı çalışabilir.
Girişleri değişmediyse Lint rapor görevinin de çalıştırılmasına gerek yoktur. Bununla ilgili bilinen bir sorun da lint görevi UP-TO-DATE olduğunda stdout'a yazdırılan lint metin çıkışı olmamasıdır (sorun no. 191897708).
Dinamik özellik modüllerinde lint çalıştırma
AGP, artık dinamik özellik modüllerinden lint çalıştırmayı desteklememektedir.
İlgili uygulama modülünden lint çalıştırıldığında, dinamik özellik modüllerinde lint çalıştırılır. Tüm sorunlar, uygulamanın lint raporuna dahil edilir. Bununla ilgili bilinen bir sorun da, bir uygulama modülünden checkDependencies = true
ile lint çalıştırırken, aynı zamanda uygulama bağımlılığı olmayan dinamik özellik kitaplığı bağımlılıklarının kontrol edilmemesidir (sorun #191977888).
lint yalnızca varsayılan varyantta çalıştırılıyor
./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ıyordu.
R8 küçültücüde sınıf uyarıları eksik
R8 eksik sınıfları ve -dontwarn
seçeneğini daha hassas ve tutarlı bir şekilde yönetir.
Bu nedenle, R8'in yayınladığı eksik sınıf uyarılarını değerlendirmeye başlamanız gerekir.
R8, uygulamanızda tanımlanmamış bir sınıf referansıyla veya bağımlılıklarından biriyle karşılaştığında derleme çıkışınızda bir uyarı mesajı 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ı yoksayabilirsiniz. Uyarıyı yoksaymanın yaygın iki nedeni şunlardır:
-
JVM'yi ve eksik sınıfı hedefleyen kitaplıklar, JVM kitaplığı türündedir (yukarıdaki örnekte olduğu gibi).
-
Bağımlılıklarınızdan biri yalnızca derleme süresine yönelik bir API kullanıyor.
proguard-rules.pro
dosyanıza -dontwarn
kuralı ekleyerek eksik sınıf uyarısını yoksayabilirsiniz. Örneğin:
-dontwarn java.lang.instrument.ClassFileTransformer
Kolaylık sağlamak için AGP, eksik olabilecek tüm kuralları içeren bir dosya oluşturarak 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 gradle.properties
içinde android.r8.failOnMissingClasses = true
değerini ayarlayarak bunları hataya dönüştürebilirsiniz. AGP 8.0'da bu uyarılar derlemenizi bozan hatalara dönüşür. proguard-rules.pro
dosyanıza -ignorewarnings
seçeneğini ekleyerek AGP 7.0 davranışını korumak mümkündür, ancak bu önerilmez.
Android Gradle eklentisi oluşturma önbelleği kaldırıldı
AGP derleme önbelleği, AGP 4.1'de kaldırılmıştır. Daha önce AGP 2.3'te Gradle derleme önbelleğini tamamlayacak şekilde kullanıma sunulan AGP derleme önbelleğinin yerini, AGP 4.1'deki Gradle derleme önbelleği aldı. 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ılmıştır.
Projenizde Java 11 kaynak kodu kullanın
Artık uygulamanızın projesinde Java 11'e kadar kaynak kodunu derleyebilirsiniz. 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 yeni dil özelliklerini kullanabilirsiniz.
Bu özelliği etkinleştirmek için compileOptions
öğesini istediğiniz Java sürümüne ve compileSdkVersion
değerini 30 veya üzeri 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 öğeapi
veyaimplementation
ile değiştirildi.
*Derle 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 otomatik olarak yeni yapılandırmalara taşır.
Android'e göre derleme yaparken sınıf yolu değişikliği Gradle eklentisi
Android Gradle eklentisine göre derleme yapıyorsanız derleme sınıf yolunuz değişebilir. AGP artık api/implementation
yapılandırmalarını dahili olarak kullandığından bazı yapılar derleme sınıf yolunuzdan kaldırılabilir. Derleme zamanında bir AGP bağımlılığına bağımlıysanız bunu açık bağımlılık olarak eklediğinizden emin olun.
Java kaynakları klasörüne yerel kitaplıkların eklenmesi desteklenmez.
Önceden, 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 desteklenmez ve Java kaynakları klasöründeki yerel kitaplıklar yok sayılır. Bunun yerine, yerel kitaplıklar (android.sourceSets.main.jniLibs.srcDirs
) için tasarlanan DSL yöntemini kullanın. Daha fazla bilgi için kaynak kümelerini 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 eklentisi ile uyumsuzluk
Android Gradle Plugin 7.0.0, Kotlin Multiplatform Plugin 1.5.0 ve sonraki sürümlerle uyumludur. Kotlin Çoklu Platform desteğini kullanan projelerin, Android Gradle Eklentisi 7.0.0'ı kullanabilmek 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 geçirebilirsiniz ancak bu önerilmemektedir.
Daha fazla bilgi için KT-43944 numaralı telefonu inceleyin.
Hata analizi çıkışı eksik
lint görevi güncel olduğunda stdout'a yazdırılan lint metin çıkışı yok (sorun no. 191897708). Daha fazla bilgi için lint için davranış değişiklikleri bölümünü inceleyin. Bu sorun, Android Gradle eklentisi 7.1 sürümünde düzeltilecektir.
Dinamik özellik kitaplığı bağımlılıklarının tümü lint kontrolünden alınmaz
Bir uygulama modülünden checkDependencies = true
ile lint çalıştırırken, aynı zamanda uygulama bağımlılığı olmadığı sürece dinamik özellik kitaplığı bağımlılıkları kontrol edilmez (sayı 191977888).
Çözüm olarak, lint görevi bu kitaplıklarda çalıştırılabilir. Daha fazla bilgi için lint için davranış değişiklikleri bölümüne bakın.