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üncelleme çeşitli hata düzeltmeleri içerir. Önemli hata düzeltmelerinin listesini görmek için Release Updates 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 edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin.
SDK Build Tools 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 konusuna bakın.

AGP 7.0'ı çalıştırmak için JDK 11 gerekir

Uygulamanızı oluşturmak için Android Gradle eklentisi 7.0'ı kullanırken Gradle'ı çalıştırmak için artık JDK 11 gereklidir. Android Studio Arctic Fox, JDK 11'i paketler ve Gradle'ı varsayılan olarak bu JDK'yı kullanacak şekilde yapılandırır. Bu nedenle, çoğu Android Studio kullanıcısının projelerinde herhangi bir 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.

Kullanımdan kaldırılan SDK Tools paketindeki SDK Manager ve AVD Manager'ın JDK 11 ile çalışmadığını unutmayın. AGP 7.0 ve sonraki sürümlerde SDK Manager ve AVD Manager'ı kullanmaya devam etmek için mevcut Android SDK Command-Line Tools paketindeki araçların yeni sürümlerine geçmeniz gerekir.

Variant API kararlı sürümü

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 kapsamında, Artifacts arayüzü üzerinden, yapılar adı verilen bir dizi ara dosya kullanıma sunduk. Birleştirilmiş manifest gibi bu yapı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 yapay nesnelerin sayısını artırarak Variant API'yi genişletmeye devam edeceğiz.

Lint'teki davranış değişiklikleri

Bu bölümde, Android Gradle eklentisi 7.0.0'daki çeşitli Lint davranış değişiklikleri açıklanmaktadır.

Kitaplık bağımlılıkları için iyileştirilmiş lint

checkDependencies = true ile lint çalıştırmak artık daha hızlı. Kitaplık bağımlılıklarına sahip bir uygulamadan oluşan Android projelerinde, checkDependencies değerinin aşağıda gösterildiği gibi true olarak ayarlanması ve lint'in ./gradlew :app:lint üzerinden çalıştırılması ö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ı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 UP-TO-DATE olabilir

Bir 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" (GÜNCEL) olarak görünür. Bu değişiklikle birlikte, checkDependencies = true içeren bir uygulama modülünde lint çalıştırıldığında yalnızca değişen modüllerin analizlerini çalıştırması gerekecek. Bu sayede Lint daha da hızlı çalışabilir.

Girişleri değişmediyse Lint raporu görevinin de çalıştırılması gerekmez. İlgili bir bilinen sorun, lint görevi UP-TO-DATE olduğunda stdout'a lint metin çıkışı yazdırılmamasıdır (191897708 numaralı sorun).

Dinamik özellik modüllerinde lint çalıştırma

AGP artık lint'i dynamic-feature modüllerinden çalıştırmayı desteklemiyor. Lint'i ilgili uygulama modülünden çalıştırmak, dinamik özellik modüllerinde lint'i çalıştırır ve uygulamadaki tüm sorunları lint raporuna dahil eder. Bununla ilgili bir bilinen sorun da lint'i bir uygulama modülünden checkDependencies = true ile çalıştırırken dinamik özellik kitaplığı bağımlılıklarının uygulama bağımlılıkları da olmadıkları sürece kontrol edilmemesidir (sorun #191977888).

Yalnızca varsayılan varyantta lint çalıştırma

./gradlew :app:lint komutu artık yalnızca varsayılan varyant için lint çalıştırır. AGP'nin önceki sürümlerinde, tüm varyantlar için lint çalıştırılıyordu.

R8 küçültücüsünde eksik sınıf uyarıları

R8, eksik sınıfları ve -dontwarn seçeneğini daha hassas ve tutarlı bir şekilde işler. Bu nedenle, R8 tarafından verilen 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 çıktınızda görünen bir uyarı 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ı yoksaymak isteyebilirsiniz. Uyarıyı dikkate almamanın iki yaygın nedeni vardır:

  1. JVM'yi hedefleyen ve eksik sınıfı içeren 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 kullanılan bir API kullanıyor.

-dontwarn dosyanıza proguard-rules.pro kuralı ekleyerek eksik sınıf uyarısını yoksayabilirsiniz. Örneğin:

-dontwarn java.lang.instrument.ClassFileTransformer

AGP, kolaylık sağlamak için olası tüm eksik 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ı 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 android.r8.failOnMissingClasses = true ayarını gradle.properties olarak belirleyerek bunları hataya dönüştürebilirsiniz. AGP 8.0'da bu uyarılar, derlemenizi bozan hatalara dönüşecek. -ignorewarnings seçeneğini proguard-rules.pro dosyanıza 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ı. Gradle derleme önbelleğini tamamlamak için daha önce 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 özelliği, android.buildCacheDir özelliği 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 yapabilir, 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 daha yeni dil özelliklerini kullanabilirsiniz.

Bu özelliği etkinleştirmek için compileOptions ayarını istediğiniz Java sürümüne, compileSdkVersion ayarını 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ıldı:

  • compile
    Kullanım alanına bağlı olarak bu özelliğin yerini api veya implementation almıştır.
    *Derleme 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 yeni yapılandırmalara otomatik olarak taşır.

Android Gradle eklentisine karşı derleme yapılırken sınıf yolu değişikliği

Android Gradle eklentisine karşı derleme yapıyorsanız derleme sınıf yolunuz değişebilir. AGP artık dahili olarak api/implementation yapılandırmalarını kullandığından bazı yapılar derleme sınıf yolunuzdan kaldırılabilir. Derleme zamanında bir AGP bağımlılığını kullanıyorsanız bunu açık bir bağımlılık olarak eklediğinizden emin olun.

Java kaynakları klasörüne yerel kitaplık ekleme desteklenmez.

Daha önce, 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 özellik desteklenmez ve Java kaynakları klasöründeki yerel kitaplıklar yoksayılır. Bunun yerine, yerel kitaplıklar için tasarlanan DSL yöntemini kullanın: android.sourceSets.main.jniLibs.srcDirs. Daha fazla bilgi için kaynak kümelerini yapılandırma başlıklı makaleyi inceleyin.

Bilinen sorunlar

Bu bölümde, Android Gradle eklentisi 7.0.0'da bilinen sorunlar açıklanmaktadır.

1.4.x Kotlin Multiplatform eklentisiyle uyumsuzluk

Android Gradle eklentisi 7.0.0, Kotlin Multiplatform eklentisi 1.5.0 ve sonraki sürümlerle uyumludur. Kotlin Multiplatform desteğini kullanan projelerin, Android Gradle Plugin 7.0.0'ı kullanmak 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 düşürebilirsiniz ancak bu işlem önerilmez.

Daha fazla bilgi için KT-43944 numaralı makaleye bakın.

Lint çıkışı eksik

Lint görevi güncel olduğunda stdout'a lint metin çıkışı yazdırılmıyor (191897708 numaralı sorun). Daha fazla bilgi için Lint ile ilgili davranış değişiklikleri başlıklı makaleyi inceleyin. Bu sorun, Android Gradle eklentisi 7.1 sürümünde düzeltilecektir.

Tüm dinamik özellik kitaplığı bağımlılıkları lint denetiminden geçirilmez

Lint, bir uygulama modülünden checkDependencies = true ile çalıştırıldığında, dinamik özellik kitaplığı bağımlılıkları aynı zamanda uygulama bağımlılıkları olmadıkları sürece kontrol edilmez (191977888 numaralı sorun). Geçici çözüm olarak, bu kitaplıklarda lint görevi çalıştırılabilir. Daha fazla bilgi için Lint ile ilgili davranış değişiklikleri başlıklı makaleyi inceleyin.