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.