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:

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

  2. 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 öğe api veya implementation 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.