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 içeren (ancak kod veya kaynak içermeyen) bir örnek iskelet projesinde aşağıdaki gibi performans iyileştirmeleri yaşayabilirsiniz:

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 dakika ~9 sn. ~2,5 sn.
1 satırlık Java değişikliği (uygulama değişikliği) ~2 dakika 15 saniye ~29 sn ~6,4 sn

Bu değişikliklerden bazıları mevcut derlemeleri bozuyor. Bu nedenle, yeni eklentiyi kullanmadan önce projenizi taşıma
çabasını göz önünde bulundurmalısınız.

Yukarıda açıklanan performans iyileştirmelerini deneyimlemezseniz lütfen bir hata kaydı oluşturun ve Gradle Profiler'ı kullanarak derlemenizin 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 edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin.
SDK Build Tools 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 gerekmiyor. Eklenti, varsayılan olarak gereken minimum sürümü kullanıyor. Bu nedenle, android.buildToolsVersion özelliğini artık kaldırabilirsiniz.

3.0.1 (Kasım 2017)

Bu, Android Studio 3.0.1'i desteklemek için yapılan küçük bir güncellemedir ve genel hata düzeltmelerinin yanı sıra performans iyileştirmelerini içerir.

Optimizasyonlar

  • Ayrıntılı görev grafiği sayesinde çok modüllü projelerde daha iyi paralellik.
  • Bağımlılıkta değişiklik yaparken Gradle, bu bağımlılığın API'sine erişimi olmayan modülleri yeniden derlemeyerek daha hızlı derlemeler gerçekleştirir. Aşağıdaki yöntemlerle hangi bağımlılıkların API'lerini diğer modüllere sızdırdığını kısıtlamanız gerekir: Gradle'ın yeni bağımlılık yapılandırmalarını kullanma: implementation, api, compileOnly ve runtimeOnly.
  • Sınıf başına dexing sayesinde daha hızlı 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 DEX'e dönüştürülüyor. Ayrıca, minSdkVersion değerini 20 veya daha düşük olarak ayarlayan ve eski çoklu dex kullanan uygulamalarda derleme hızının iyileşmesini de bekleyebilirsiniz.
  • Belirli görevleri, önbelleğe alınmış çıkışları kullanacak şekilde optimize ederek derleme hızlarını iyileştirdik. Bu optimizasyondan yararlanmak için öncelikle Gradle derleme önbelleğini etkinleştirmeniz gerekir.
  • Artık varsayılan olarak etkinleştirilen AAPT2 ile artımlı kaynak işlemede iyileştirme yapıldı. AAPT2'yi kullanırken sorun yaşıyorsanız lütfen hata bildirin. Ayrıca, android.enableAapt2=false dosyanızda android.enableAapt2=false değerini ayarlayarak ve komut satırından ./gradlew --stop komutunu çalıştırarak Gradle daemon'ı yeniden başlatarak AAPT2'yi devre dışı bırakabilirsiniz.gradle.properties

Yeni özellikler

  • Varyant duyarlı bağımlılık yönetimi. Bir modülün belirli bir varyantını oluştururken eklenti 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ştiriyor.
  • Android Instant Apps ve Android Instant Apps SDK'sını (SDK Yöneticisi'ni kullanarak indirebilirsiniz) desteklemek için yeni bir özellik modülü eklentisi içerir. Yeni eklentiyle özellik modülleri oluşturma hakkında daha fazla bilgi edinmek için Birden fazla özellik içeren anlık uygulamanın yapısı başlıklı makaleyi inceleyin.
  • Belirli Java 8 dili özelliklerini ve Java 8 kitaplıklarını kullanmak için yerleşik destek. Jack artık kullanımdan kaldırıldı ve gerekli değil. Geliştirilmiş Java 8 desteğini kullanmak için önce Jack'i devre dışı bırakmanız gerekir. Bu destek, varsayılan araç zincirine yerleştirilmiştir. Daha fazla bilgi için Java 8 dili özelliklerini kullanma başlıklı makaleyi inceleyin.
  • Android Test Orchestrator ile test çalıştırma desteği eklendi. Bu sayede, uygulamanızın her testini kendi Instrumentation çağrısı içinde çalıştırabilirsiniz. Her test kendi Instrumentation örneğinde çalıştığından, testler arasındaki 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 düzenlemesi 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. Bu mülk varsayılan olarak HOST olarak ayarlanır. Bu değer, cihaz üzerinde düzenlemeyi devre dışı bırakır ve testleri çalıştırmanın standart yöntemidir.

    Groovy

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    Kotlin

            android {
              testOptions {
                execution = "ANDROID_TEST_ORCHESTRATOR"
              }
            }
            
  • Yeni androidTestUtilbağımlılık yapılandırması, enstrümantasyon testlerinizi çalıştırmadan önce başka bir test yardımcısı APK'sı (ör. Android Test Orchestrator) 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")
              ...
            }
            
  • testOptions.unitTests.includeAndroidResources, Roboelectric gibi Android kaynakları gerektiren birim testlerini desteklemek için 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. Testleriniz daha sonra aşağıdaki anahtarlar için sınıf yolundaki com/android/tools/test_config.properties öğesini inceleyebilir:

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

      Not: Kitaplık modüllerinde, birleştirilmiş öğeler bağımlılıkların öğelerini içermez (65550419 numaralı soruna bakın).

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

    • android_merged_resources: Modüldeki ve tüm bağımlılıklarındaki tüm kaynakları içeren birleştirilmiş kaynaklar dizininin mutlak yolu.

    • 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 manifestindeki 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 Instant Apps SDK 1.1 ve sonraki sürümlerde dile özgü APK'lar desteklenir.
  • Artık harici yerel derleme projenizin çıkış dizinini aşağıdaki şekilde 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ümlerini kullanabilirsiniz.
  • Yeni lintChecks bağımlılık yapılandırması, özel lint kurallarını tanımlayan bir JAR oluşturmanıza ve bunu AAR ile APK projelerinize paketlemenize olanak tanır.

    Özel lint kurallarınız, tek bir JAR çıkışı veren 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ış değişiklikleri

  • Android eklentisi 3.0.0, belirli API'leri kaldırır ve bunları kullanırsanız derlemeniz bozulur. Örneğin, artık outputFile() nesnelerine erişmek için Variants API'yi kullanamaz veya her varyantın manifest dosyasını almak için processManifest.manifestOutputFile() kullanamazsınız. Daha fazla bilgi edinmek için API değişiklikleri başlıklı makaleyi okuyun.
  • Artık derleme araçları için bir sürüm belirtmeniz gerekmiyor (bu nedenle, android.buildToolsVersion özelliğini kaldırabilirsiniz). Varsayılan olarak eklenti, kullandığınız Android eklentisi sürümü için gerekli olan en düşük derleme araçları sürümünü otomatik olarak kullanır.
  • Artık PNG sıkıştırmayı aşağıdaki buildTypes bloğunda etkinleştirebilir/devre dışı bırakabilirsiniz. PNG sıkıştırma, çok sayıda PNG dosyası içeren projelerin derleme sürelerini artırdığı için hata ayıklama derlemeleri hariç tüm derlemelerde 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 projelerinizde yapılandırdığınız yürütülebilir hedefleri otomatik olarak 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'nı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'e geçiş yapmanız gerekir. Daha fazla bilgi için ndkcompile'dan taşıma başlıklı makaleyi inceleyin.