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 için Gradle'i güncelleme başlıklı makaleyi inceleyin.
SDK Oluşturma Araçları 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ının düzenleme deneyimini iyileştirmeye yardımcı olmak için Android Gradle 4.1 eklentisinin DSL'si ve API'leri artık uygulama sınıflarından ayrı olarak bir dizi Kotlin arayüzünde tanımlanmaktadır. Bunun anlamı:

  • Boş değer kabul edip etmediği ve değişken olup olmadığı 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 kolay hale getirmek için net bir şekilde tanımlanmıştır.

Önemli: KTS derleme komut dosyalarını kullanmaya başladıysanız veya buildSrc'te Kotlin kullanıyorsanız bu, önceki sürümlerde çalışma zamanında hata olarak görünen belirli hatalar için kaynak uyumluluğu sorunlarına neden olabilir.

DSL'de mutasyona uğratılmak üzere tasarlanan koleksiyon türleri artık şu şekilde tanımlanır:

val collection: MutableCollectionType

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

collection = collectionTypeOf(...)

Ancak koleksiyonun değiştirilmesi her yerde desteklenir. Bu nedenle collection += … ve collection.add(...) artık her yerde çalışabilir.

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'lardan C/C++ bağımlılıklarını dışa aktarma

Android Gradle eklentisi 4.0, AAR bağımlılıklarına Prefab paketlerini içe aktarma özelliğini ekledi. AGP 4.1'de, artık harici yerel derlemenizdeki kitaplıkları Android kitaplığı projesi için bir AAR'da 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 üretilen AAR'da paketlenir ve her biri, belirtilen dizindeki üstbilgileri bağımlılarına aktarır.

Not: Android Gradle eklentisi 4.0 ve sonraki sürümlerin kullanıcıları için önceden derlenmiş 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 göz atın.

Kotlin meta verileri için R8 desteği

Kotlin, Kotlin dil yapılarını tanımlamak için Java sınıf dosyalarındaki özel meta verileri kullanır. R8 artık kotlin-reflect kullanılarak Kotlin kitaplıklarının ve uygulamalarının küçültülmesini tam olarak desteklemek için Kotlin meta verilerini koruma ve yeniden yazma desteğine sahiptir.

Kotlin meta verilerini korumak için aşağıdaki koruma kurallarını ekleyin:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Bu işlem, R8'e doğrudan saklanan tüm sınıfların Kotlin meta verilerini saklamasını söyler.

Daha fazla bilgi için Medium'da R8 ile Kotlin yansımasını kullanarak Kotlin kitaplıklarını ve uygulamalarını küçültme{:.external} başlıklı makaleyi inceleyin.

Hata ayıklama derlemelerindeki iddialar

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

Davranışta yapılan değişiklikler

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 Gradle derleme önbelleği tarafından tamamen kullanımdan kaldırıldı. Bu değişiklik derleme süresini etkilemez.

cleanBuildCache görevi ve android.enableBuildCache ile android.buildCacheDir özellikleri artık kullanılmıyor ve AGP 7.0'da kaldırılacak. android.enableBuildCache mülkü şu anda etkisizdir. android.buildCacheDir mülkü 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 uygulamalarda uygulama boyutu önemli ölçüde küçültüldü

Bu sürümden itibaren, R sınıflarındaki alanlar varsayılan olarak artık tutulmuyor. Bu durum, kod küçültmeyi etkinleştiren uygulamalarda APK boyutunda önemli ölçüde tasarruf sağlayabilir. R sınıflarına yansıma yoluyla erişmediğiniz sürece bu durum davranış değişikliğine yol açmaz. Aksi takdirde, söz konusu R sınıfları için saklama kuralları eklemeniz gerekir.

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

Deneysel işaret android.namespacedRClass, android.nonTransitiveRClass olarak yeniden adlandırıldı.

gradle.properties dosyasında ayarlanan bu işaret, her kitaplığın R sınıfının adlandırma alanını etkinleştirir. Böylece, R sınıfı yalnızca kitaplıkta tanımlanan kaynakları içerir ve kitaplığın bağımlılıklarından hiçbirini içermez. Bu da söz konusu kitaplığın R sınıfının boyutunu azaltı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 ve sonraki sürümlerde API şekerleme kaldırma desteği (Android Gradle Eklentisi 4.0.0 ve sonraki sürümler) başlıklı makaleyi inceleyin.

Sürüm özellikleri, kitaplık projelerindeki BuildConfig sınıfından kaldırıldı

Yalnızca kitaplık projeleri için BuildConfig.VERSION_NAME ve BuildConfig.VERSION_CODE özellikleri, oluşturulan BuildConfig sınıfından kaldırıldı. Bunun nedeni, bu statik değerlerin uygulamanın sürüm kodu ve adının nihai değerlerini yansıtmaması ve bu nedenle yanıltıcı olmasıdır. Ayrıca bu değerler, manifest birleştirme işlemi sırasında atlanmıştır.

Android Gradle eklentisinin gelecek 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şmek mümkün değildir.

Uygulama modülleri için herhangi bir değişiklik yoktur. DSL'de versionCode ve versionName'ye değer atamaya devam edebilirsiniz. Bu değerler, uygulamanın manifest dosyasına ve BuildConfig alanlarına dağıtılır.

NDK yolunu ayarlama

Modülünüzün build.gradle dosyasında android.ndkPath mülkünü kullanarak yerel NDK yüklemenizin yolunu ayarlayabilirsiniz.


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

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

Bu özelliği android.ndkVersion özelliğiyle birlikte kullanıyorsanı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 derlenme ve çalıştırılma davranışını değiştirdik. Bir kitaplığın birim testleri artık derlenip kitaplığın derleme/çalışma zamanı sınıflarına göre çalıştırılır. Bu da birim testinin kitaplığı harici alt projelerle aynı şekilde kullanmasına neden olur. Bu yapılandırma genellikle daha iyi testlere yol açar.

Bazı durumlarda, veri bağlamayı kullanan kitaplık birim testleri eksik DataBindingComponent veya BR sınıflarıyla karşılaşabilir. Bir birim testinde bu sınıflara göre derleme ve çalıştırma işlemi yanlış çıkışlar oluşturabileceğinden, bu testlerin androidTest projesindeki bir araçla testine taşınması gerekir.

io.fabric Gradle eklentisinin desteği sonlandırıldı

io.fabric Gradle eklentisinin desteği sonlandırıldı ve bu eklenti, Android Gradle eklentisinin 4.1 sürümüyle uyumlu değildir. Desteği sonlandırılan Fabric SDK ve Firebase Crashlytics SDK'sına geçiş hakkında daha fazla bilgi edinmek için Firebase Crashlytics SDK'sına yükseltme başlıklı makaleyi inceleyin.