Android Gradle eklentisi 7.1.0 (Ocak 2022)

Android Gradle eklentisi 7.1.0, çeşitli yeni özellikler ve iyileştirmeler içeren önemli bir sürümdür.

7.1.3 (Nisan 2022)

Bu küçük güncelleme aşağıdaki hata düzeltmelerini içerir:

  • R8 tarafından bildirilen yinelenen sınıf sorunları

Bu sürümde yer alan hata düzeltmelerinin tam listesini görmek için Android Studio Bumblebee Patch 3 blog yayınını inceleyin.

7.1.2 (Şubat 2022)

Bu küçük güncelleme aşağıdaki hata düzeltmelerini içerir:

  • Android Gradle eklentisi 7.1.0-rc01, birim testleri sırasında ASM bayt kodu dönüştürmesini gerçekleştiremiyor
  • Gradle senkronizasyonu "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'." hatasıyla başarısız oluyor.
  • Android Gradle Plugin 7.0.0'da bazı yeni DSL blokları Groovy DSL'den kullanılamaz.
  • AGP 7.1 yeni yayınlama API'si: Oluşturulan javadoc jar dosyası imzalanmıyor
  • ClassesDataSourceCache, en son Asm sürümünü kullanmalıdır
  • Android Studio BumbleBee, en son değişiklikleri her zaman dağıtmıyor

Bu sürümde yer alan hata düzeltmelerinin tam listesini görmek için Android Studio Bumblebee Patch 2 blog yayınını inceleyin.

7.1.1 (Şubat 2022)

Bu küçük güncelleme, Android Studio Bumblebee Patch 1'in yayınlanmasına karşılık gelir.

Bu sürümde yer alan hata düzeltmelerinin listesini görmek için Android Studio Bumblebee Patch 1 blog yayınını inceleyin.

Uyumluluk

Minimum sürüm Varsayılan sürüm Notlar
Gradle 7.2 7.2 Daha fazla bilgi edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin.
SDK Build Tools 30.0.3 30.0.3 SDK oluşturma araçlarını yükleyin veya yapılandırın.
NDK Yok 21.4.7075529 NDK'nın farklı bir sürümünü yükleyin veya yapılandırın.
JDK 11 11 Daha fazla bilgi için JDK sürümünü ayarlama konusuna bakın.

Lint analizi görevi artık önbelleğe alınabilir

AndroidLintAnalysisTask artık Gradle derleme önbelleği ile uyumlu. org.gradle.caching=true dosyanızda gradle.properties ayarını yaparak derleme önbelleğini etkinleştirirseniz lint analiz görevi, mümkün olduğunda çıkışını derleme önbelleğinden alır.

Android Gradle eklentisiyle lint çalıştırılırken en büyük darboğaz genellikle lint analizidir. Bu nedenle, derleme önbelleğinin etkinleştirilmesi birçok durumda lint çalıştırılırken derleme hızını artırır. Örneğin, çok modüllü bir projeniz varsa ve CI sunucunuzda lint çalıştırmadan önce derleme dizininizi temizlerseniz performansınızda belirgin bir iyileşme görürsünüz.

C/C++ modülleri artık aynı projedeki diğer C/C++ modüllerine referans verebilir.

C/C++ kodu içeren bir Gradle Android modülü artık başka bir Gradle modülündeki başlık dosyalarına ve kitaplık koduna referans verecek şekilde ayarlanabilir. Gradle modülleri arasında başlıkları ve kitaplıkları iletmek için Prefab protokolü kullanılır.

Şartlar

  • Tüketim modülü CMake olmalı ve ndk-build olmamalıdır. ndk-build desteği için gelecekte bir NDK güncellemesi yapılması gerekecektir. Yayınlama modülü CMake veya ndk-build olabilir.

  • Tüketim modülü, build.gradle dosyasında prefab'yi etkinleştirmelidir.

android {
  buildFeatures {
    prefab true
  }
}
  • Yayınlama modülü, build.gradle dosyasında prefabPublishing özelliğini etkinleştirmelidir.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Tüketim modülü, build.gradle dosyasındaki dependencies bloğuna bir satır eklenerek yayınlama modülüne referans vermelidir. Örneğin:
dependencies {
  implementation project(':mylibrary')
}
  • Yayınlama modülü, prefab bölümü kullanarak bir paket sunmalıdır. Örneğin:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Tüketen modülün CMakeLists.txt dosyası, üreten modül tarafından yayınlanan paketi bulmak için find_package() kullanabilir. Örneğin:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

AGP ile yerel AAR tüketicilerinin ve üreticilerinin nasıl yapılandırılacağı hakkında daha fazla bilgi için AGP ile yerel bağımlılıklar başlıklı makaleye bakın.

settings.gradle dosyasındaki depo ayarları

Android Studio Bumblebee'de yeni bir proje oluşturulduğunda en üst düzeydeki build.gradle dosyası plugins bloğunu ve ardından derleme dizininizi temizleyecek kodu içerir:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

Daha önce üst düzey build.gradle dosyasında bulunan depo ayarları artık settings.gradle dosyasında yer alıyor:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

Modül düzeyindeki build.gradle dosyası değişmemiştir. Bu nedenle, projenizdeki tüm modüller için geçerli olan derleme yapılandırmalarını veya Gradle'ın kendisi için geçerli olan depoları ve bağımlıları tanımlamak üzere üst düzey build.gradle dosyasını ve settings.gradle dosyasını kullanın. Projenizdeki belirli bir modüle özgü derleme yapılandırmalarını tanımlamak için modül düzeyindeki build.gradle dosyasını kullanın.

Geliştirilmiş kaynak küçültücü

Android Studio Bumblebee, uygulamanızın boyutunu küçültmenize yardımcı olan geliştirilmiş bir kaynak küçültücü içerir.

Dinamik özellikli uygulamalar için destek

Android Gradle eklentisi 7.1.0-alpha09'da Android kaynak küçültücünün varsayılan uygulaması güncellendi. Yeni uygulama, dinamik özelliklere sahip uygulamaların küçültülmesini destekler.

Deneysel olarak uygulama boyutunu daha da küçültme

Yeni kaynak küçültücü uygulaması, kaynak tablosunu değiştirerek kullanılmayan değer kaynaklarını ve kullanılmayan dosya kaynaklarına yapılan referansları kaldırır. Böylece küçültülmüş uygulamanızın boyutu daha da küçülür. Yeni kaynak küçültücü, kullanılmayan dosya kaynaklarını tamamen silebilir ve uygulamanızın boyutunu daha da küçültebilir. Bu davranış henüz varsayılan olarak etkinleştirilmemiştir ancak deneysel seçeneği android.experimental.enableNewResourceShrinker.preciseShrinking=true projenizin gradle.properties dosyasına ekleyerek bu özelliği deneyebilirsiniz.

Lütfen yeni kaynak küçültücü veya deneysel işaretle ilgili bulduğunuz sorunları bildirin. Sorunları teşhis etmeye yardımcı olmak veya geçici bir çözüm olarak, projenizin android.enableNewResourceShrinker=false bölümüne gradle.properties ekleyerek önceki uygulamaya geri dönebilirsiniz. Yeni küçültücü, kullanılmayan dosya tabanlı kaynakları önceki kaynak küçültücüden biraz farklı olan minimal dosyalarla değiştirir ancak bunun çalışma zamanı üzerinde herhangi bir etkisi olması beklenmez.

Eski uygulamanın Android Gradle eklentisi 8.0.0'da kaldırılması planlanmaktadır.

Derleme varyantı yayınlama

Android Gradle eklentisinin 7.1.0 ve sonraki sürümleri, hangi derleme varyantlarının Apache Maven deposunda yayınlanacağını yapılandırmanıza olanak tanır. AGP, yeni yayınlama DSL'sine dayalı olarak tek veya birden fazla derleme varyantı içeren bir bileşen oluşturur. Bu bileşeni, bir yayını Maven deposunda özelleştirmek için kullanabilirsiniz. Önceki sürümlere kıyasla, varsayılan olarak bileşen oluşturulmayacağından gereksiz iş yükü de önlenir. Daha fazla bilgi edinmek için yayınlama kodu örneğine bakın.

Javadoc JAR'ı yayınlama

AGP 7.1.0 ve sonraki sürümler, Java ve Kotlin kaynaklarından Javadoc oluşturmanıza ve kitaplık projeleri için AAR'lere ek olarak Javadoc JAR dosyaları yayınlamanıza olanak tanır. Javadoc, POM ve Gradle Module Metadata{:.external} dosyalarına eklenir. singleVariant veya multipleVariants yayınlama bloğuna withJavadocJar() ekleyerek bu özelliği etkinleştirin. Daha fazla bilgi edinmek için yayınlama seçenekleri kod örneğine bakın.

Kaynak JAR'ını yayınlama

AGP 7.1.0 ve sonraki sürümler, kitaplık projeleri için AAR'lere ek olarak Java ve Kotlin kaynak JAR dosyalarını yayınlamanıza olanak tanır. Kaynaklar, POM ve Gradle Module Metadata{:.external} dosyalarına eklenir. Bu özelliği, singleVariant veya multipleVariants yayınlama bloğuna withSourcesJar() ekleyerek etkinleştirebilirsiniz. Daha fazla bilgi edinmek için yayınlama seçenekleri kod örneğine bakın.

Lint bloğu semantik değişikliği

Bir sorunun verilen önem düzeyini geçersiz kılan tüm lint yöntemleri (enable, disable/ignore, informational, warning, error, fatal) artık yapılandırma sırasına uymaktadır. Örneğin, finalizeDsl()'de bir sorunu kritik olarak ayarlamak, artık ana DSL'de devre dışı bırakmayı geçersiz kılıyor. Daha fazla bilgi için lint{} blok referans dokümanları ve Android derleme akışı ve uzantı noktaları başlıklı makaleleri inceleyin.

Navigation Safe Args Gradle eklentisinin bağlı olduğu AGP API'leri kaldırıldı. AGP 7.1, Navigation Safe Args 2.4.0-rc1 veya 2.4.0 sürümleriyle çalışmaz ancak 2.5.0-alpha01 ve 2.4.1 sürümleriyle çalışır. Bu arada, geçici çözüm olarak Navigation Safe Args'ın anlık görüntü derlemesi olan Navigation 2.5.0-SNAPSHOT ile AGP 7.1'i kullanabilirsiniz. Anlık görüntü derlemesini kullanmak için anlık görüntü talimatlarını uygulayın. Derleme kimliği #8054565 olmalıdır.

Ayrıca, Navigation Safe Args 2.4.1 ve 2.5.0 sürümleri artık AGP 4.2 ile çalışmayacak. Bu Safe Args sürümlerini kullanmak için AGP 7.0 ve sonraki sürümleri kullanmanız gerekiyor.

Otomatik bileşen oluşturmayı devre dışı bırakma

AGP 8.0'dan itibaren otomatik bileşen oluşturma özelliği varsayılan olarak devre dışı bırakılacak. Şu anda AGP 7.1, her derleme çeşidi için otomatik olarak bir bileşen oluşturur. Bu bileşen, derleme çeşidiyle aynı ada sahiptir ve tüm derleme çeşitlerini içeren bir all bileşeni içerir. Bu otomatik bileşen oluşturma özelliği devre dışı bırakılır. Yeni davranışa geçmek için android.disableAutomaticComponentCreation değerini true. olarak ayarlayarak otomatik bileşen oluşturmayı manuel olarak devre dışı bırakmanız gerekir. Daha fazla bilgi için Maven Publish eklentisini kullanma başlıklı makaleyi inceleyin.

Firebase Performance Monitoring uyumluluğu

AGP 7.1, Firebase Performance Monitoring Gradle eklentisinin 1.4.0 ve önceki sürümleriyle uyumlu değildir. AGP Yükseltme Asistanı, eklentiyi 1.4.1 sürümüne otomatik olarak güncellemez. Bu nedenle, firebase-perf kullanıyorsanız ve AGP'yi 7.1 sürümüne yükseltmek istiyorsanız bu yükseltmeyi manuel olarak yapmanız gerekir.

Bilinen sorunlar

Bu bölümde, Android Gradle eklentisi 7.1.0'da bilinen sorunlar açıklanmaktadır.

Hilt eklentisini kullanan bir uygulama projesinde birim testiyle ilgili sorunlar

Birim testi sınıf yolu, enstrümanlı olmayan uygulama sınıflarını içerir. Bu nedenle, birim testleri çalıştırılırken Hilt, bağımlılık eklemeyi işlemek için uygulama sınıflarını enstrümanlı hale getirmez.

Bu sorun, 7.1.1 sürümünde düzeltilecektir. 213534628 numaralı soruna bakın.