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
Gradle 7.0.2 7.0.2
SDK Derleme Araçları 30.0.2 30.0.2
NDK Yok 21.4.7075529.
JDK 11 11

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, çoğu Android Studio 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 görevi yeniden çalıştırmak gerekmiyor. 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.

Ayrıca, 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:

  1. JVM'yi ve eksik sınıfı hedefleyen kitaplıklar JVM'dir. kitaplığı türünden (yukarıdaki örnekte olduğu gibi) emin olun.

  2. 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 veya implementation.
    . *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.