Android Gradle Plugin 4.1.0 (Ağustos 2020)

Uyumluluk

  Minimum sürüm Varsayılan sürüm Notlar
Gradle 6,5 Yok Daha fazla bilgi edinmek için Gradle'ı güncelleme konusuna bakın.
SDK Derleme Araçları 29.0.2 29.0.2 SDK Derleme Araçlarını yükleyin veya yapılandırın.
450 Yok 21.1.6352462 Farklı bir NDK sürümü yükleyin veya yapılandırın.

Android eklentisinin bu sürümü için gerekenler:

Bu sürümdeki varsayılan NDK sürümü 21.1.6352462'dir. Farklı bir NDK sürümü yüklemek için NDK'nın belirli bir sürümünü yükleme bölümüne göz atın.

Yeni özellikler

Android Gradle eklentisinin bu sürümü aşağıdaki yeni özellikleri içerir.

Kotlin Script DSL desteği

Kotlin derleme komut dosyası kullanıcılarının düzenleme deneyimini iyileştirmeye yardımcı olmak amacıyla, Android Gradle eklentisi 4.1'in DSL ve API'leri artık uygulama sınıflarından ayrı olarak bir dizi Kotlin arayüzünde tanımlanmaktadır. Bu gelişme şu anlama geliyor:

  • Boş değer ve değişkenlik artık Kotlin türlerinde açıkça bildirilmektedir.
  • Bu arayüzlerden oluşturulan belgeler Kotlin API Referansı'nda yayınlanmaktadır.
  • Android Gradle Eklentisi'nin API yüzeyi, gelecekte Android derlemelerinin kapsamının genişletilmesini daha az zahmetsiz hale getirmek için açıkça tanımlanmıştır.

Önemli: buildSrc ürününde KTS derleme komut dosyalarını veya Kotlin'i zaten kullanıyorsanız bu durum, önceki sürümlerde çalışma zamanı hataları olarak görülebilecek belirli hatalarda kaynak uyumluluğu kesintilerine neden olabilir.

DSL'de dönüştürülmek üzere tasarlanan koleksiyon türleri artık şu şekilde eşit olarak tanımlanmaktadır:

val collection: MutableCollectionType

Yani daha önce bu özelliği destekleyen bazı koleksiyonlarda artık aşağıdakilerin Kotlin alfabelerinde yazılması mümkün değil:

collection = collectionTypeOf(...)

Bununla birlikte, koleksiyonun değiştirilmesi aynı şekilde desteklenmektedir. Bu nedenle, collection += … ve collection.add(...) artık her yerde çalışacaktır.

Android Gradle eklentisi Kotlin API'lerini ve DSL'yi kullanan bir projeyi yükseltirken bir sorunla karşılaşırsanız lütfen hata bildiriminde bulunun.

C/C++ bağımlılıklarını AAR'lerden dışa aktarma

Android Gradle eklentisi 4.0, AAR bağımlılıklarında Prefab paketlerini içe aktarma özelliğini ekledi. AGP 4.1'de, Android Kitaplığı projeleri için AAR'de harici yerel derlemenizden kitaplıkları dışa aktarmak mümkündür.

Yerel kitaplıklarınızı dışa aktarmak için kitaplık projenizin build.gradle dosyasındaki android bloğuna aşağıdakileri ekleyin:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

Bu örnekte, ndk-build veya CMake harici yerel derlemenizdeki mylibrary ve myotherlibrary kitaplıkları, derlemeniz tarafından oluşturulan AAR'de paketlenir ve her biri, başlıkları belirtilen dizinden bağlı dosyalarına dışa aktarır.

Not: Android Gradle eklentisi 4.0 ve sonraki sürümlerin kullanıcıları için önceden oluşturulmuş yerel kitaplıkları içe aktarmayla ilgili yapılandırma ayarları değişti. Daha fazla bilgi için 4.0 sürüm notlarına bakın.

Kotlin meta verileri için R8 desteği

Kotlin, Kotlin dili yapılarını tanımlamak için Java sınıfı dosyalarında özel meta veriler kullanır. R8 artık kotlin-reflect kullanarak Kotlin kitaplıklarının ve uygulamalarının küçültülmesini tamamen desteklemek için Kotlin meta verilerini koruma ve yeniden yazma desteğine sahip.

Kotlin meta verilerini saklamak için aşağıdaki keep kurallarını ekleyin:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Bu işlem, R8'e doğrudan saklanan tüm sınıflar için Kotlin meta verilerini tutma talimatı verir.

Daha fazla bilgi edinmek için Medium'da R8 ile Kotlin yansımasını kullanarak Kotlin kitaplıklarını ve uygulamalarını küçültme{:.external} konusuna bakın.

Hata ayıklama derlemelerinde onaylamalar

Uygulamanızın hata ayıklama sürümünü, Android Gradle eklentisi 4.1.0 ve sonraki sürümlerini kullanarak derlediğinizde yerleşik derleyici (D8), derleme zamanında onayları etkinleştirmek için uygulamanızın kodunu yeniden yazar. Böylece onay denetimlerinin her zaman etkin olmasını sağlarsınız.

Davranış değişiklikleri

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.

cleanBuildCache görevi ile android.enableBuildCache ve android.buildCacheDir özelliklerinin desteği sonlandırılmıştır ve bu özellikler AGP 7.0'da kaldırılacaktır. android.enableBuildCache özelliğinin şu anda herhangi bir etkisi yoktur. Ancak android.buildCacheDir özelliği ve cleanBuildCache görevi, AGP 7.0 sürümüne kadar mevcut AGP derleme önbelleği içeriğini silmek üzere çalışır.

Kod daraltma özelliğini kullanan uygulamalar için uygulama boyutu önemli ölçüde küçültüldü

Bu sürümden itibaren, R sınıflarındaki alanlar artık varsayılan olarak tutulmayacaktır. Bu durum, kod daraltmayı etkinleştiren uygulamalar için APK boyutunda önemli tasarruf sağlayabilir. R sınıflarına yansıma olarak erişmiyorsanız bu, davranış değişikliğine neden olmaz. Böyle bir durumda söz konusu R sınıfları için Keep kuralları eklemeniz gerekir.

android.namespacedRClass mülkü, android.nonTransitiveRClass olarak yeniden adlandırıldı

android.namespacedRClass deneme işareti, android.nonTransitiveRClass olarak yeniden adlandırıldı.

gradle.properties dosyasında ayarlanan bu işaret, her bir kitaplığın R sınıfının ad belirleme işlemini etkinleştirir. Böylece R sınıfı yalnızca kitaplığın kendisinde tanımlanan kaynakları içerir ve kitaplığın bağımlılıklarından hiçbirini içermez. Bu sayede, söz konusu kitaplık için R sınıfının boyutunu azaltır.

Kotlin DSL: coreLibraryDesugaringEnabled yeniden adlandırdı

coreLibraryDesugaringEnabled Kotlin DSL derleme seçeneği, isCoreLibraryDesugaringEnabled olarak değiştirildi. Bu işaret hakkında daha fazla bilgi için Java 8+ API şeker giderme desteği (Android Gradle Plugin 4.0.0+) sayfasına göz atın.

Kitaplık projelerindeki BuildConfig sınıfından sürüm özellikleri kaldırıldı

Yalnızca kitaplık projelerinde, BuildConfig.VERSION_NAME ve BuildConfig.VERSION_CODE özellikleri oluşturulan BuildConfig sınıfından kaldırıldı. Bunun nedeni, bu statik değerler uygulamanın sürüm kodunun ve adının nihai değerlerini yansıtmaması ve dolayısıyla yanıltıcı olmasıydı. Ayrıca, bu değerler manifest birleştirme sırasında silindi.

Android Gradle eklentisinin gelecekteki bir sürümünde, kitaplıklar için versionName ve versionCode özellikleri de DSL'den kaldırılacaktır. Şu anda uygulama sürümü koduna/adına bir kitaplık alt projesinden otomatik olarak erişmenin bir yolu yoktur.

Uygulama modüllerinde herhangi bir değişiklik yapılmamıştır. DSL'de versionCode ve versionName öğelerine değer atamaya devam edebilirsiniz. Bu değerler, uygulamanın manifest ve BuildConfig alanlarına yayılır.

NDK yolunu ayarlama

Yerel NDK yüklemenizin yolunu, modülünüzün build.gradle dosyasındaki android.ndkPath özelliğini kullanarak ayarlayabilirsiniz.


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

Bu özelliği android.ndkVersion özelliğiyle birlikte kullanırsanız bu yol, android.ndkVersion ile eşleşen bir NDK sürümü içermelidir.

Kitaplık birimi test davranışı değişiklikleri

Kitaplık birimi testlerinin derlenme ve çalıştırılma davranışını değiştirdik. Bir kitaplığın birim testleri, artık derlenir ve kitaplığın derleme/çalışma zamanı sınıflarına göre çalıştırılır. Bu durumda birim testi, kitaplığı harici alt projelerle aynı şekilde tüketir. Bu yapılandırma genellikle daha iyi test yapılmasını sağlar.

Bazı durumlarda, veri bağlamayı kullanan kitaplık birimi testlerinde DataBindingComponent veya BR sınıfları eksik olabilir. Bir birim testinde bu sınıfları derlemek ve çalıştırmak yanlış çıktılar üretebileceğinden bu testlerin androidTest projesindeki izlemeli bir teste taşınması gerekir.

io.fabric Gradle eklentisi kullanımdan kaldırıldı

io.fabric Gradle eklentisi kullanımdan kaldırıldı ve Android Gradle eklentisinin 4.1 sürümüyle uyumlu değil. Kullanımdan kaldırılan Fabric SDK ve Firebase Crashlytics SDK'ya geçiş hakkında daha fazla bilgi için Firebase Crashlytics SDK'ya yükseltme sayfasını inceleyin.