Android Gradle Plugin 7.0.0 (Temmuz 2021)
Android Gradle eklentisi 7.0.0, çeşitli yeni ve özellikleri ve iyileştirmeleri.
7.0.1 (Ağustos 2021)
Bu küçük güncelleme, çeşitli hata düzeltmelerini içerir. Dikkate değer hata düzeltmelerinin listesini görmek için şuradaki ilgili gönderiyi okuyun: Sürüm Güncellemeleri bloguna bakın.
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 sayfasına göz atın. |
SDK Derleme Araçları | 30.0.2 | 30.0.2 | SDK Derleme 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 edinmek için JDK sürümünü ayarlama bölümüne bakın. |
AGP 7.0'ı çalıştırmak için JDK 11 gerekir
Uygulamanızı geliştirmek için Android Gradle eklentisi 7.0'ı kullanırken JDK 11 artık gerekli. Android Studio Arctic Fox'ın JDK 11 ve sonraki sürümleri Gradle'ı varsayılan olarak kullanacak şekilde yapılandırır. Bu da, Android Studio'nun kullanıcıların projelerinde yapılandırma değişikliği yapması gerekmez.
Gerekirse Android Studio içinde AGP tarafından kullanılan JDK sürümünü kullanıyorsanız JDK 11'i kullanmanız gerekir. veya daha yüksek olabilir.
Android Studio'dan bağımsız AGP kullanırken JDK sürümünü
JAVA_HOME ortam değişkenini ayarlamak
veya -Dorg.gradle.java.home
komut satırı seçeneği
JDK 11'in yükleme dizinine ekleyin.
Kullanımdan kaldırılan SDK Araçları paketindeki SDK Manager ve AVD Manager'ın JDK 11 ile çalışmaz. SDK Manager'ı ve AVD Manager'ı kullanmaya devam etmek için veya daha yeni bir sürüm kullanıyorsanız geçerli Android SDK Komut Satırı Araçları paketindedir.
Varyant API kararlı
Yeni Variant API artık kararlı. Yeni arayüzleri com.android.build.api.variant ve örneklere göz atın gradle-recipes GitHub projesi. Yeni Varyant API'si için bazı ara dosyaları kullanıma sunduk. projeler, tasarım araçları Yapılar kullanır. Birleştirilmiş manifest gibi bu yapılar güvenli bir şekilde elde edilebilir üçüncü taraf eklentileri ve kodları kullanılarak özelleştirilmiştir.
Yeni işlevler ekleyerek Variant API'yi genişletmeye devam edeceğiz ve aynı sanal makine için kullanılabilir hale getirdiğimiz ara eserlerin sayısını birçok seçenek var.
Lint için davranış değişiklikleri
Bu bölümde Android Gradle'daki birden fazla Lint davranışı değişikliği açıklanmaktadır eklentisi 7.0.0.
Kitaplık bağımlılıkları için iyileştirilmiş lint
checkDependencies = true
ile lint çalıştırmak artık daha hızlı
daha iyi hale getiriyoruz. Uygulama kitaplığı olan Android projeleri için
olması durumunda, checkDependencies
yönergesinin
Aşağıda gösterildiği gibi true
ve lint aracını kullanarak
./gradlew :app:lint
tüm bağımlılığı analiz eder
modülleri paralel olarak hazırlamanız ve
ve tüm bağımlıları.
Eski
// 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 lint analizi
yeniden çalıştırılması gerekmez. Böyle bir durumda,
görevin yürütülmesi "GÜNCELLE" olarak görünür Gradle'da
çıktı. Bu değişiklikle birlikte, checkDependencies = true
ile bir uygulama modülünde lint çalıştırırken, yalnızca değiştirilmiş olan modüller
ve analizini yapabiliyorlar. Sonuç olarak Lint daha da hızlı çalışabilir.
Lint raporu görevinin, girişleri değiştirildi. İlgili bilinen bir sorun da hata analizi olmamasıdır lint görevi UP-TO-DATE olduğunda stdout'a yazdırılan metin çıkışı (sorun numarası 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ırmak,
ve uygulamanın hata analizi dosyasındaki tüm sorunları dahil etmeli
rapordur. İlgili bilinen bir sorun da lint testinin çalıştırılmasıdır.
bir uygulama modülünden checkDependencies = true
ile
Dinamik özellik kitaplığı bağımlılıkları, aynı zamanda uygulama değilse kontrol edilmez
bağımlılıkları (sorunu
#191977888).
lint komutu yalnızca varsayılan varyantta çalıştırılıyor
./gradlew :app:lint
çalıştırıldığında artık yalnızca
varsayılan varyanttır. AGP'nin önceki sürümlerinde tüm kullanıcılar için lint hatası
için de geçerlidir.
R8 daraltıcıda eksik sınıf uyarıları
Daha hassas bir şekilde R8
sürekli olarak eksik sınıfları ve -dontwarn
seçeneğini ele alıyor.
Bu nedenle, yayınlanan eksik sınıf uyarılarını değerlendirmeye başlamanız gerekir.
Sahibi: R8.
R8, uygulamanızda tanımlanmamış bir sınıf referansıyla karşılaştığında veya bir uyarı alırsa, derlemenizde bir uyarıyla çıktı. Örnek:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Bu uyarı, sınıf tanımının
java.lang.instrument.ClassFileTransformer
bulunamadı
en iyi uygulamaları paylaşacağız. Bu genellikle bir hata olduğu anlamına gelse de
bu uyarıyı yoksayabilirsiniz. İki yaygın neden
için şu adımları uygulayın:
-
JVM'yi ve eksik sınıfı hedefleyen kitaplıklar JVM'dir. kitaplığı türünden (yukarıdaki örnekte olduğu gibi) emin olun.
-
Bağımlılıklarınızdan biri yalnızca derleme zamanında API kullanıyor.
-dontwarn
ekleyerek eksik sınıf uyarılarını yoksayabilirsiniz.
kuralı proguard-rules.pro
dosyanıza ekleyin. Örnek:
-dontwarn java.lang.instrument.ClassFileTransformer
Kolaylık sağlamak için AGP, potansiyel olarak
aşağıdaki gibi bir dosya yoluna yazılmasını sağlayın:
app/build/outputs/mapping/release/missing_rules.txt
URL'yi
kurallarını proguard-rules.pro
dosyanıza ekleyin.
AGP 7.0'da, eksik sınıf iletileri uyarı olarak görünür ve şunları yapabilirsiniz:
ayarlayarak bunları hatalara
dönüştürebilirsiniz
android.r8.failOnMissingClasses = true
inç
gradle.properties
. AGP 8.0'da bu uyarılar
sorunları çözebilir. AGP 7.0 davranışını korumak için
-ignorewarnings
seçeneğini ekleyerek
proguard-rules.pro
dosyası var, ancak bu önerilmez.
Android Gradle eklentisi derleme önbelleği kaldırıldı
AGP derleme önbelleği, AGP 4.1'de kaldırıldı. AGP'de daha önce kullanıma sunulanlar 2.3 ile Gradle derleme önbelleğini tamamlamak için AGP derleme önbelleğinin yerini aldı tamamen AGP 4.1'deki Gradle derleme önbelleğinden geliyor. Bu değişiklik, anlamına gelir.
AGP 7.0'da android.enableBuildCache
özelliği,
android.buildCacheDir
özelliği ve
cleanBuildCache
görev kaldırıldı.
Projenizde Java 11 kaynak kodunu kullanın
Artık uygulamanızın projesinde Java 11'e kadar kaynak koduna derleyebilir, böylece özel arayüz yöntemleri, elmas, özel ekran işlecini ve lambda parametreleri için yerel değişken söz dizimini kullanın.
Bu özelliği etkinleştirmek için compileOptions
öğesini istediğiniz gibi ayarlayın
Java sürümü ve compileSdkVersion
değerini 30 veya sonraki bir sürüme 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,api
ile değiştirildi veyaimplementation
.
*Derleme varyantları için de geçerlidir (ör.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ırmanın üç yolu vardır.
Android'de derleme sırasında Classpath değişikliği Gradle eklentisi
Android Gradle eklentisine göre derliyorsanız derlemeniz
sınıf yolu değişebilir. AGP artık api/implementation
kullandığından
dahili olarak yapılandırmazsanız bazı yapılar derlemenizden kaldırılabilir
sınıf yolu. Derleme zamanında bir AGP bağımlılığınız varsa
açık bir bağımlılık olarak ekleyebiliriz.
Java kaynaklarına yerel kitaplık ekleme klasör desteklenmiyor
Önceden, Java kaynakları klasörüne yerel bir kitaplık ekleyebiliyordu ve
klasörü android.sourceSets.main.resources.srcDirs
kullanarak kaydedin. Böylece yerel kitaplık çıkarılıp nihai
APK'ya dokunun. AGP 7.0 sürümünden itibaren bu desteklenmemektedir ve
Java kaynakları klasörü yok sayılır. Bunun yerine, şuna yönelik DSL yöntemini kullanın:
yerel kitaplıklar, android.sourceSets.main.jniLibs.srcDirs
. Örneğin,
daha fazla bilgi için
nasıl yapılandırılır?
kaynak kümeleri.
Bilinen sorunlar
Bu bölümde, Android Gradle eklentisindeki bilinen sorunlar açıklanmaktadır 7.0.0 için geçerlidir.
1.4.x Kotlin Multiplatform eklentisiyle uyumsuzluk
Android Gradle Plugin 7.0.0 şunlarla uyumludur: Kotlin Dili Çoklu platform eklentisi 1.5.0 ve sonraki sürümler. Kotlin kullanan projeler Android Gradle'ı kullanabilmek için çoklu platform desteğinin Kotlin 1.5.0'a güncellenmesi gerekiyor Eklenti 7.0.0. Geçici çözüm olarak Android Gradle eklentisini eski sürüme geçirebilirsiniz 4.2.x olarak ayarlayacağız, ancak bu önerilmez.
Daha fazla bilgi için bkz. KT-43944.
Eksik lint çıkışı
lint görevi olduğunda, stdout'a yazdırılan lint metin çıkışı olmaz güncel (sorun numarası 191897708). Daha fazla bilgi için bkz. Lent için davranış değişiklikleri. Bu sayı , Android Gradle eklentisi 7.1'de düzeltilecektir.
Dinamik özellik kitaplığı bağımlılıklarının hepsi için hata analizi yapılmamış
checkDependencies = true
uygulama modülü, dinamik özellik kitaplığı bağımlılıkları
Bunlar aynı zamanda uygulama bağımlılıklarıdır.
(sorun numarası 191977888).
Geçici bir çözüm olarak, lint görevi bu kitaplıklarda çalıştırılabilir. Konu hakkında daha fazla bilgi için:
lint için davranış değişiklikleri bölümünü inceleyin.