Android Gradle eklentisi 3.0.0 (Ekim 2017)
Android Gradle eklentisi 3.0.0, büyük projelerin performans sorunlarını gidermeyi amaçlayan çeşitli değişiklikler içerir.
Örneğin, yaklaşık 130 modül ve çok sayıda harici bağımlılık (ancak kod veya kaynak içermeyen) içeren bir örnek iskelet projede aşağıdakine benzer performans iyileştirmeleri görebilirsiniz:
Android eklentisi sürümü + Gradle sürümü | Android eklentisi 2.2.0 + Gradle 2.14.1 | Android eklentisi 2.3.0 + Gradle 3.3 | Android eklentisi 3.0.0 + Gradle 4.1 |
---|---|---|---|
Yapılandırma (ör. ./gradlew --help çalıştırma) |
~2 dk. | ~9 sn. | ~2,5 sn. |
1 satırlık Java değişikliği (uygulama değişikliği) | ~2 dk. 15 sn. | ~29 sn | ~6,4 sn |
Bu değişikliklerden bazıları mevcut derlemeleri bozar. Bu nedenle, yeni eklentiyi kullanmadan önce projenizi taşıma
sürecini göz önünde bulundurmanız gerekir.
Yukarıda açıklanan performans iyileştirmelerini görmüyorsanız lütfen hata kaydı oluşturun ve Gradle Profiler'ı kullanarak derleme işleminizin izini ekleyin.
Android eklentisinin bu sürümü için aşağıdakiler gereklidir:
Minimum sürüm | Varsayılan sürüm | Notlar | |
---|---|---|---|
Gradle | 4.1 | 4.1 | Daha fazla bilgi için Gradle'i güncelleme başlıklı makaleyi inceleyin. |
SDK Oluşturma Araçları | 26.0.2 | 26.0.2 | SDK Oluşturma Araçları'nı yükleyin veya yapılandırın. Bu güncellemeyle birlikte, artık derleme araçları için bir sürüm belirtmeniz gerekmez. Eklenti varsayılan olarak gereken minimum sürümü kullanır. Bu nedenle, android.buildToolsVersion mülkünü kaldırabilirsiniz. |
3.0.1 (Kasım 2017)
Bu, Android Studio 3.0.1'i desteklemek için yayınlanan küçük bir güncellemedir ve genel hata düzeltmeleri ile performans iyileştirmeleri içerir.
Optimizasyonlar
- Ayrıntılı görev grafiği sayesinde çok modüllü projeler için daha iyi paralellik
- Gradle, bağımlılıkta değişiklik yaparken söz konusu bağımlılığın API'sine erişimi olmayan modülleri yeniden derlemediği için daha hızlı derlemeler gerçekleştirir.
Gradle'in yeni bağımlılık yapılandırmalarını kullanarak API'lerini diğer modüllere sızdıran bağımlılıkları kısıtlamanız gerekir:
implementation
,api
,compileOnly
veruntimeOnly
. - Sınıf başına dexing nedeniyle daha hızlı artımlı derleme hızı. Artık her sınıf ayrı DEX dosyalarına derleniyor ve yalnızca değiştirilen sınıflar yeniden derleniyor. Ayrıca,
minSdkVersion
değerini 20 veya daha düşük bir değere ayarlayan ve eski çoklu dex kullanan uygulamalarda daha iyi derleme hızları elde edebilirsiniz. - Belirli görevleri önbelleğe alınmış çıkışları kullanacak şekilde optimize ederek derleme hızları iyileştirildi. Bu optimizasyondan yararlanmak için öncelikle Gradle derleme önbelleğini etkinleştirmeniz gerekir.
- AAPT2 kullanılarak artımlı kaynak işleme iyileştirildi. AAPT2 artık varsayılan olarak etkindir. AAPT2'yi kullanırken sorun yaşıyorsanız lütfen hata bildirin. Ayrıca,
gradle.properties
dosyanızdaandroid.enableAapt2=false
değerini ayarlayarak ve komut satırından./gradlew --stop
çalıştırarak Gradle daemon'unu yeniden başlatarak AAPT2'yi devre dışı bırakabilirsiniz.
Yeni özellikler
- Varyant bilinçli bağımlılık yönetimi. Eklenti artık bir modülün belirli bir varyantını derlerken yerel kitaplık modülü bağımlılıklarının varyantlarını, derlemekte olduğunuz modülün varyantıyla otomatik olarak eşleştiriyor.
- Android Instant Apps ve Android Instant Apps SDK'sını (SDK yöneticisini kullanarak indirebilirsiniz) destekleyen yeni bir özellik modülü eklendi. Yeni eklentiyle özellik modülleri oluşturma hakkında daha fazla bilgi edinmek için Birden fazla özelliğe sahip anında uygulamanın yapısı başlıklı makaleyi inceleyin.
- Belirli Java 8 dil özelliklerini ve Java 8 kitaplıklarını kullanmaya yönelik yerleşik destek Jack'in desteği sonlandırıldı ve artık gerekli değil. Varsayılan araç zincirine yerleştirilmiş gelişmiş Java 8 desteğini kullanmak için önce Jack'i devre dışı bırakmanız gerekir. Daha fazla bilgi için Java 8 dili özelliklerini kullanma başlıklı makaleyi okuyun.
-
Android Test Orchestrator ile test çalıştırma desteği eklendi. Bu özellik, uygulamanızın her testini kendi Instrumentation çağrısı içinde çalıştırmanıza olanak tanır. Her test kendi enstrümantasyon örneğinde çalıştığından, testler arasında paylaşılan durumlar cihazınızın CPU'sunda veya belleğinde birikmez. Ayrıca, bir test kilitlense bile yalnızca kendi Instrumentation örneğini kapatır. Bu nedenle, diğer testleriniz çalışmaya devam eder.
- Cihaz üzerinde test koordinasyonunun kullanılıp kullanılmayacağını belirlemek için
testOptions.execution
eklendi. Android Test Orchestrator'ı kullanmak istiyorsanız aşağıda gösterildiği gibiANDROID_TEST_ORCHESTRATOR
değerini belirtmeniz gerekir. Bu mülk varsayılan olarakHOST
olarak ayarlanır. Bu ayar, cihaz üzerinde koordinasyonu devre dışı bırakır ve test çalıştırmanın standart yöntemidir.
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- Cihaz üzerinde test koordinasyonunun kullanılıp kullanılmayacağını belirlemek için
-
Yeni
androidTestUtil
bağımlılık yapılandırması, instrumentasyon testlerinizi çalıştırmadan önce Android Test Orchestrator gibi başka bir test yardımcısı APK'sı yüklemenize olanak tanır:Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
Roboelectric gibi Android kaynaklarını gerektiren birim testlerini desteklemek için
testOptions.unitTests.includeAndroidResources
eklendi. Bu özelliğitrue
olarak ayarladığınızda, birim testlerinizi çalıştırmadan önce eklenti kaynak, öğe ve manifest birleştirme işlemi gerçekleştirir. Ardından testleriniz, aşağıdaki anahtarlar için sınıf yolu üzerindecom/android/tools/test_config.properties
'yi inceleyebilir:-
android_merged_assets
: Birleştirilmiş öğeler dizininin mutlak yolu.Not: Kitaplık modülleri için birleştirilen öğeler, bağımlılık öğelerini içermez (#65550419 numaralı soruna bakın).
-
android_merged_manifest
: Birleştirilmiş manifest dosyasının mutlak yolu. -
android_merged_resources
: Modüldeki tüm kaynakları ve tüm bağımlılıkları içeren, birleştirilmiş kaynaklar dizininin mutlak yolu. -
android_custom_package
: Nihai R sınıfının paket adı. Uygulama kimliğini dinamik olarak değiştirirseniz bu paket adı, uygulamanın manifest dosyasında bulunanpackage
özelliğiyle eşleşmeyebilir.
-
- Kaynak olarak yazı tipleri desteği (Android 8.0 (API düzeyi 26)'da kullanıma sunulan yeni bir özelliktir).
- Android Hazır Uygulamalar SDK 1.1 ve sonraki sürümlerde dile özgü APK'lar için destek
-
Artık harici doğal derleme projenizin çıkış dizinini aşağıda gösterildiği gibi değiştirebilirsiniz:
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- Artık Android Studio'dan yerel projeler oluştururken CMake 3.7 veya sonraki sürümleri kullanabilirsiniz.
-
Yeni
lintChecks
bağımlılık yapılandırması, özel lint kurallarını tanımlayan bir JAR oluşturmanıza ve bunu AAR ve APK projelerinize paketlemenize olanak tanır.Özel lint kurallarınız, tek bir JAR dosyası yayınlayan ve yalnızca
compileOnly
bağımlılıklarını içeren ayrı bir projeye ait olmalıdır. Diğer uygulama ve kitaplık modülleri,lintChecks
yapılandırmasını kullanarak lint projenize bağlı olabilir:Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
Davranışta yapılan değişiklikler
- Android 3.0.0 eklentisi belirli API'leri kaldırır ve bu API'leri kullanırsanız derlemeniz bozulur. Örneğin, artık
outputFile()
nesnelerine erişmek için Variants API'yi veya her bir varyantın manifest dosyasını almak içinprocessManifest.manifestOutputFile()
'yi kullanamazsınız. Daha fazla bilgi edinmek için API değişiklikleri başlıklı makaleyi inceleyin. - Artık derleme araçları için bir sürüm belirtmeniz gerekmez (bu nedenle
android.buildToolsVersion
özelliğini kaldırabilirsiniz). Varsayılan olarak, eklenti kullandığınız Android eklentisi sürümünün gerektirdiği minimum yapı araçları sürümünü otomatik olarak kullanır. - Artık PNG sıkıştırmayı
buildTypes
bölümünde etkinleştirebilir/devre dışı bırakabilirsiniz. Aşağıda gösterildiği gibi. PNG sıkıştırma, birçok PNG dosyası içeren projelerin derleme sürelerini uzattığı için hata ayıklama derlemeleri dışındaki tüm derlemeler için varsayılan olarak etkindir. Bu nedenle, diğer derleme türlerinin derleme sürelerini iyileştirmek için PNG sıkıştırmayı devre dışı bırakmanız veya resimlerinizi WebP'ye dönüştürmeniz gerekir.Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- Android eklentisi artık harici CMake projelerinizi yapılandırdığınız yürütülebilir hedefleri otomatik olarak derliyor.
- Artık
annotationProcessor
bağımlılık yapılandırmasını kullanarak işleyici sınıf yolu yoluna notlandırma işleyicileri eklemeniz gerekir. - Desteği sonlandırılan
ndkCompile
'ün kullanımı artık daha kısıtlı. Bunun yerine, APK'nıza paketlemek istediğiniz yerel kodu derlemek için CMake veya ndk-build'i kullanmaya geçmeniz gerekir. Daha fazla bilgi için ndkcompile'den taşıma başlıklı makaleyi inceleyin.