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 ve runtimeOnly.
  • 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ızda android.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 gibi ANDROID_TEST_ORCHESTRATOR değerini belirtmeniz gerekir. Bu mülk varsayılan olarak HOST 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"
              }
            }
            
  • 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ği true 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 üzerinde com/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 bulunan package ö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çin processManifest.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.