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 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'ün aşağıda gösterildiği gibi true olarak ayarlanması ve ./gradlew :app:lint aracılığıyla lint çalıştırılması ö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 yeniden ç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 (sorunun numarası: 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:

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

  2. 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 bu dosyayı 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 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ı korumak mümkündür 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 kaynak koduna kadar derleme yapabilirsiniz. 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 veya implementation 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.