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.