Android Gradle Plugin 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ığa (ancak kod ya da kaynak içermeyen) sahip bir örnek iskelet projesinde aşağıdakine benzer performans iyileştirmeleri elde edebilirsiniz:

Android eklenti 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 bozuyor. Bu nedenle, yeni eklentiyi kullanmadan önce
projenizi taşıma işlemini göz önünde bulundurmalısınız.

Yukarıda açıklanan performans iyileştirmelerinden memnun kalmazsanız lütfen hata bildiriminde bulunun ve Gradle Profiler'ı kullanarak derlemenizin izini ekleyin.

Android eklentisinin bu sürümü için gerekenler:

  • Gradle 4.1 veya üzeri. Daha fazla bilgi için Gradle'ı güncelleme bölümünü okuyun.
  • Build Tools 26.0.2 veya daha yeni bir sürüme sahip olma. Bu güncellemeyle birlikte artık derleme araçları için sürüm belirtmenize gerek yoktur. Eklenti, varsayılan olarak gerekli minimum sürümü kullanır. Dolayısıyla artık android.buildToolsVersion özelliğini kaldırabilirsiniz.

3.0.1 (Kasım 2017)

Bu, Android Studio 3.0.1'i destekleyen küçük bir güncellemedir ve genel hata düzeltmelerini ve performans iyileştirmelerini içerir.

Optimizasyonlar

  • Ayrıntılı bir görev grafiği sayesinde, çok modüllü projelerde daha iyi paralellik.
  • Bağımlılıkta değişiklik yaparken Gradle, söz konusu bağımlılığın API'sine erişimi olmayan modülleri yeniden derlemeyerek daha hızlı derlemeler gerçekleştirir. Gradle'ın 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 veri işleme sayesinde daha yüksek artımlı derleme hızı. Her sınıf artık ayrı DEX dosyalarında derleniyor ve yalnızca değiştirilen sınıflar yeniden dizinleniyor. Ayrıca minSdkVersion değerini 20 veya daha düşük bir değere ayarlayan ve eski multi-dex kullanan uygulamalar için de iyileştirilmiş derleme hızları bekleyebilirsiniz.
  • Belirli görevleri önbelleğe alınmış çıkışları kullanacak şekilde optimize ederek derleme hızları artırıldı. Bu optimizasyondan yararlanmak için önce Gradle oluşturma önbelleğini etkinleştirmeniz gerekir.
  • Artık varsayılan olarak etkin olan AAPT2 kullanılarak iyileştirilmiş artımlı kaynak işleme. AAPT2 kullanırken sorun yaşıyorsanız lütfen hata bildiriminde bulunun. Ayrıca gradle.properties dosyanızda android.enableAapt2=false ayarını yaparak ve komut satırından ./gradlew --stop komutunu çalıştırarak Gradle arka plan programını yeniden başlatarak AAPT2'yi devre dışı bırakabilirsiniz.

Yeni özellikler

  • Varyanta duyarlı bağımlılık yönetimi. Eklenti, bir modülün belirli bir varyantını oluştururken artık yerel kitaplık modülü bağımlılıklarının varyantlarını, oluşturduğunuz modülün varyantıyla otomatik olarak eşleştirir.
  • Android Hazır Uygulamalar'ı ve Android Hazır Uygulamalar SDK'sını (SDK yöneticisini kullanarak indirebilirsiniz) destekleyen yeni bir Özellik modülü eklentisi içerir. Yeni eklentiyle Özellik modülleri oluşturma hakkında daha fazla bilgi edinmek için Birden çok özelliğe sahip hazır bir uygulamanın yapısı başlıklı makaleyi okuyun.
  • Belirli Java 8 dili özelliklerini ve Java 8 kitaplıklarını kullanmak için yerleşik destek. Jack kullanımdan kaldırıldı ve artık gerekli değil. Varsayılan araç zincirinde yerleşik olarak bulunan iyileştirilmiş 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 konusunu okuyun.
  • Android Test Orchestrator ile test çalıştırma desteği eklendi. Bu destek, uygulamanızın her testini kendi Enstrümantasyon çağrısı ile çalıştırmanıza olanak tanır. Her test kendi Enstrümantasyon örneğinde çalıştığı için testler arasında paylaşılan durum, cihazınızın CPU veya belleğinde birikmez. Bir test çökse bile yalnızca kendi Enstrümantasyon örneğini kaldırır. Böylece diğer testleriniz çalışmaya devam eder.

    • Cihaz üzerinde test düzenlemesinin 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 belirtmeniz gerekir. Varsayılan olarak bu özellik, cihaz üzerinde düzenlemeyi devre dışı bırakan ve test çalıştırmanın standart yöntemi olan HOST değerine ayarlanmıştır.

    Modern

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

            android {
              testOptions {
                execution = "ANDROID_TEST_ORCHESTRATOR"
              }
            }
            
  • Yeni androidTestUtil bağımlılık yapılandırması, araç testlerinizi çalıştırmadan önce Android Test Orchestrator gibi başka bir test yardımcı APK'sı yüklemenize olanak tanır:

    Modern

            dependencies {
              androidTestUtil 'com.android.support.test:orchestrator:1.0.0'
              ...
            }
            

    Kotlin

            dependencies {
              androidTestUtil("com.android.support.test:orchestrator:1.0.0")
              ...
            }
            
  • RoboElektrik gibi Android kaynakları gerektiren birim testlerini desteklemek için testOptions.unitTests.includeAndroidResources eklendi. Bu özelliği true olarak ayarladığınızda eklenti, birim testlerinizi çalıştırmadan önce kaynak, öğe ve manifest birleştirme işlemi gerçekleştirir. Daha sonra testleriniz, aşağıdaki anahtarlar için sınıf yolunda com/android/tools/test_config.properties öğesini inceleyebilir:

    • android_merged_assets: Birleştirilmiş öğe dizininin mutlak yolu.

      Not: Kitaplık modüllerinde, birleştirilen öğeler bağımlılık öğelerini içermez (65550419 numaralı sorunu inceleyin).

    • android_merged_manifest: Birleştirilmiş manifest dosyasının mutlak yolu.

    • android_merged_resources: Birleştirilmiş kaynak dizininin mutlak yolu. Bu dizin, modüldeki tüm kaynakları ve tüm bağımlılıklarını içerir.

    • android_custom_package: Son R sınıfının paket adı. Uygulama kimliğini dinamik olarak değiştirirseniz bu paket adı, uygulamanın manifest dosyasındaki package özelliğiyle eşleşmeyebilir.

  • Kaynak olarak yazı tipleri desteği (Android 8.0 (API seviyesi 26) sürümünde kullanıma sunulan yeni bir özelliktir).
  • Android Hazır Uygulamalar SDK'sı 1.1 ve sonraki sürümlere sahip dile özgü APK'lar için destek.
  • Artık harici yerel derleme projenizin çıkış dizinini aşağıda gösterildiği gibi değiştirebilirsiniz:

    Modern

            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 bir sürümü kullanabilirsiniz.
  • Yeni lintChecks bağımlılık yapılandırması, özel lint kurallarını tanımlayan bir JAR oluşturup bunu AAR ve APK projelerinizde paketlemenize olanak tanır.

    Özel lint kurallarınız, tek bir JAR üreten ve yalnızca compileOnly bağımlılıkları içeren ayrı bir projeye ait olmalıdır. Böylece diğer uygulama ve kitaplık modülleri, lintChecks yapılandırmasını kullanarak lint projenize bağlanabilir:

    Modern

            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ış değişiklikleri

  • Android eklentisi 3.0.0 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 kullanamaz veya her bir varyantın manifest dosyasını almak için processManifest.manifestOutputFile() kullanamazsınız. Daha fazla bilgi için API değişiklikleri bölümünü okuyun.
  • Artık derleme araçları için bir sürüm belirtmeniz gerekmez (böylece artık android.buildToolsVersion özelliğini kaldırabilirsiniz). Varsayılan olarak eklenti, kullandığınız Android eklentisinin sürümü için gereken minimum derleme araçları sürümünü kullanır.
  • Artık aşağıda gösterildiği gibi buildTypes blokunda PNG dosyalarını önceden etkinleştirebilir veya devre dışı bırakabilirsiniz. PNG dosyası oluşturma, hata ayıklama derlemeleri hariç tüm derlemeler için varsayılan olarak etkindir. Bunun nedeni, çok sayıda PNG dosyası içeren projelerin derleme süresini uzatmasıdır. Bu nedenle, diğer derleme türlerinin derleme sürelerini iyileştirmek için PNG şablon işlemeyi devre dışı bırakmalı veya resimlerinizi WebP'ye dönüştürmelisiniz.

    Modern

          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 otomatik olarak harici CMake projelerinizde yapılandırdığınız yürütülebilir hedefler oluşturuyor.
  • Artık annotationProcessor bağımlılık yapılandırmasını kullanarak işlemci sınıf yoluna ek açıklama işlemcileri eklemeniz gerekir.
  • Kullanımdan kaldırılan ndkCompile kullanımını artık daha kısıtlı hale getirebilirsiniz. APK'nıza paketlemek istediğiniz yerel kodu derlemek için bunun yerine, CMake veya ndk-build kullanarak geçiş yapmanız gerekir. Daha fazla bilgi edinmek için ndkcker'dan taşıma başlıklı makaleyi inceleyin.