Android Gradle Eklentisi 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 başlıklı makaleyi inceleyin.
SDK Build Tools 29.0.2 29.0.2 SDK oluşturma araçlarını yükleyin veya yapılandırın.
NDK Yok 21.1.6352462 NDK'nın farklı bir sürümünü yükleyin veya yapılandırın.

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

Yeni özellikler

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

Kotlin Script DSL desteği

Kotlin buildscript kullanıcıları için düzenleme deneyimini iyileştirmek amacıyla Android Gradle eklentisi 4.1'in DSL'si ve API'leri artık uygulama sınıflarından ayrı olarak bir dizi Kotlin arayüzünde tanımlanıyor. Bunun anlamı:

  • Boş değer atanabilirliği ve değiştirilebilirliği artık Kotlin türlerinde açıkça belirtiliyor.
  • Bu arayüzlerden oluşturulan dokümanlar Kotlin API Referansı'nda yayınlanır.
  • Android Gradle eklentisinin API yüzeyi, gelecekte Android derlemelerini genişletmeyi daha az kırılgan hale getirmek için net bir şekilde tanımlanmıştır.

Önemli: KTS derleme komut dosyalarını zaten kullanıyorsanız veya buildSrc içinde Kotlin kullanıyorsanız bu durum, önceki sürümlerde çalışma zamanı hataları olarak ortaya çıkacak belirli hatalar için kaynak uyumluluğu sorunlarına neden olabilir.

DSL'de değiştirilmek üzere tasarlanan koleksiyon türleri artık şu şekilde tek tip olarak tanımlanıyor:

val collection: MutableCollectionType

Bu nedenle, daha önce desteklenen bazı koleksiyonlar için Kotlin komut dosyalarında artık aşağıdakileri yazmak mümkün değildir:

collection = collectionTypeOf(...)

Ancak koleksiyonun değiştirilmesi tekdüzen olarak desteklendiğinden collection += … ve collection.add(...) artık her yerde çalışmalıdır.

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

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

Android Gradle eklentisi 4.0, Prefab paketlerini AAR bağımlılıklarına aktarma özelliğini ekledi. AGP 4.1'de, artık harici yerel derlemenizdeki kitaplıkları bir Android kitaplık projesi için AAR olarak dışa aktarabilirsiniz.

Yerel kitaplıklarınızı dışa aktarmak için kitaplık projenizin build.gradle dosyasının 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'ye paketlenir ve her biri, belirtilen dizindeki üstbilgileri bağımlılarına aktarır.

Not: Android Gradle eklentisi 4.0 ve sonraki sürümlerini kullananlar için önceden oluşturulmuş yerel kitaplıkları içe aktarmaya yönelik 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 dil yapılarını tanımlamak için Java sınıf dosyalarında özel meta veriler kullanır. R8 artık Kotlin meta verilerini korumayı ve yeniden yazmayı destekliyor. Böylece, kotlin-reflect kullanılarak Kotlin kitaplıklarının ve uygulamalarının küçültülmesi tam olarak destekleniyor.

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

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

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

Daha fazla bilgi için Medium'daki Shrinking Kotlin libraries and applications using Kotlin reflection with R8{:.external} başlıklı makaleyi inceleyin.

Hata ayıklama derlemelerindeki onaylamalar

Android Gradle eklentisinin 4.1.0 ve sonraki sürümlerini kullanarak uygulamanızın hata ayıklama sürümünü oluşturduğunuzda, yerleşik derleyici (D8), derleme sırasında onaylamaları etkinleştirmek için uygulamanızın kodunu yeniden yazar. Böylece, onaylama kontrolleri her zaman etkin olur.

Davranış değişiklikleri

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 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.

cleanBuildCache görevi ile android.enableBuildCache ve android.buildCacheDir özelliklerinin desteği sonlandırıldı ve bu özellikler AGP 7.0'da kaldırılacak. android.enableBuildCache özelliği şu anda etkili değildir. android.buildCacheDir özelliği ve cleanBuildCache görevi ise mevcut AGP derleme önbelleği içeriklerini silmek için AGP 7.0'a kadar işlevsel olacaktır.

Kod daraltma kullanan uygulamaların boyutu önemli ölçüde küçültüldü

Bu sürümden itibaren, R sınıflarındaki alanlar artık varsayılan olarak tutulmaz. Bu durum, kod küçültmeyi etkinleştiren uygulamalarda APK boyutunda önemli ölçüde tasarruf sağlayabilir. Bu durum, yansıtma yoluyla R sınıflarına erişmediğiniz sürece davranış değişikliğine neden olmamalıdır. Bu durumda, söz konusu R sınıfları için koruma kuralları eklemeniz gerekir.

android.namespacedRClass özelliği, android.nonTransitiveRClass olarak yeniden adlandırıldı

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

gradle.properties dosyasında ayarlanan bu işaret, her kitaplığın R sınıfının ad alanını 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ındaki kaynakları içermez. Bu da söz konusu kitaplığın R sınıfının boyutunu küçültür.

Kotlin DSL: coreLibraryDesugaringEnabled yeniden adlandırıldı

Kotlin DSL derleme seçeneği coreLibraryDesugaringEnabled, isCoreLibraryDesugaringEnabled olarak değiştirildi. Bu işaret hakkında daha fazla bilgi için Java 8+ API desugaring support (Android Gradle Plugin 4.0.0+) başlıklı makaleyi inceleyin.

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

Yalnızca kitaplık projelerinde, bu statik değerler uygulamanın sürüm kodunun ve adının nihai değerlerini yansıtmadığı ve bu nedenle yanıltıcı olduğu için BuildConfig.VERSION_NAME ve BuildConfig.VERSION_CODE özellikleri oluşturulan BuildConfig sınıfından kaldırıldı. Ayrıca, bu değerler manifest birleştirme sırasında atıldı.

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

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

NDK yolunu ayarlama

Modülünüzün build.gradle dosyasındaki android.ndkPath özelliğiyle yerel NDK yüklemenizin yolunu ayarlayabilirsiniz.


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

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

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

Kitaplık birim testi davranış değişiklikleri

Kitaplık birim testlerinin derlenip çalıştırılma şeklini değiştirdik. Bir kitaplığın birim testleri artık kitaplığın derleme/çalışma zamanı sınıflarına göre derlenip çalıştırılıyor. Bu sayede birim testi, kitaplığı harici alt projelerle aynı şekilde kullanıyor. Bu yapılandırma genellikle daha iyi test sonuçları veriyor.

Bazı durumlarda, veri bağlama kullanan kitaplık birim testlerinde DataBindingComponent veya BR sınıfları eksik olabilir. Bu testlerin, androidTest projesinde araçlı bir teste aktarılması gerekir. Bunun nedeni, birim testinde bu sınıflara karşı derleme ve çalıştırmanın yanlış çıkış üretebilmesidir.

io.fabric Gradle eklentisinin desteği sonlandı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'sına geçiş hakkında daha fazla bilgi için Firebase Crashlytics SDK'sına yükseltme başlıklı makaleyi inceleyin.