Android Gradle Plugin 7.1.0 (Ocak 2022)

Android Gradle eklentisi 7.1.0, çeşitli yeni özellikler ve iyileştirmeler içeren ana 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üme dahil edilen hata düzeltmelerinin tam listesini görmek için Android Studio Bumblebee Yama 3 blog yayınına bakın.

7.1.2 (Şubat 2022)

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

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

Bu sürüme dahil edilen hata düzeltmelerinin tam listesini görmek için Android Studio Bumblebee Yama 2 blog yayınına bakın.

7.1.1 (Şubat 2022)

Bu küçük güncelleme, Android Studio Bumblebee Yama 1'e karşılık gelir.

Bu sürümdeki hata düzeltmelerinin listesini görmek için Android Studio Bumblebee Yama 1 blog yayınına bakın.

Uyumluluk

Minimum sürüm Varsayılan sürüm
Gradle 7,2 7,2
SDK Oluşturma Araçları 30.0.3 30.0.3
400 Yok 21.4.7075529
JDK 11 11

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

AndroidLintAnalysisTask artık Gradle derleme önbelleğiyle uyumludur. Derleme önbelleğini, gradle.properties dosyanızda org.gradle.caching=true ayarını yaparak etkinleştirirseniz lint analizi görevi, mümkün olduğunda çıktısını derleme önbelleğinden alır.

lint analizi görevi, Android Gradle eklentisiyle lint çalıştırırken genellikle en büyük performans sorunudur. 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 temizlediyseniz önemli bir performans artışı görürsünüz.

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

Artık başka bir Gradle modülünde başlık dosyalarına ve kitaplık koduna referans vermek için C/C++ kodlu bir Gradle Android modülü ayarlanabilir. Gradle modülleri arasında başlıkları ve kitaplıkları iletmek için Prefab protokolü kullanılır.

Şartlar

  • Temsil eden modül ndk-build değil, CMake olmalıdır. ndk-build desteği, ileride bir NDK güncellemesi gerektirir. Yayınlama modülü CMake veya ndk-build olabilir.

  • Tüketen modül, build.gradle dosyasında prefab öğesini 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ı dependencies blokuna bir satır ekleyerek yayınlama modülüne başvurmalıdır. Örneğin:
dependencies {
  implementation project(':mylibrary')
}
  • Yayınlama modülü, prefab bölümünü kullanan bir paketi göstermelidir. Örneğin:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Kullanıcı modülün CMakeLists.txt dosyası, üretim 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'
          }
        }
      }
    }

Yerel AAR tüketicilerinin ve üreticilerinin AGP ile nasıl yapılandırılacağıyla ilgili daha ayrıntılı açıklama için AGP ile yerel bağımlılıklar bölümüne bakın.

settings.gradle dosyasındaki kod deposu ayarları

Android Studio Bumblebee'de yeni bir proje oluşturulduğunda üst düzey build.gradle dosyası, plugins bloğunu ve derleme dizininizi temizlemek için kullanılacak 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ı şimdi 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şmedi. Bu nedenle, projenizdeki tüm modüller için geçerli olan derleme yapılandırmaları veya Gradle'ın kendisi için geçerli olan depoları ve bağımlılıkları tanımlamak için ü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.

İyileştirilmiş kaynak küçültücü

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

Dinamik özelliklere sahip uygulamalar için destek

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

Deneysel uygulama boyutu küçültme

Yeni kaynak küçültücü uygulaması, kullanılmayan değer kaynaklarını ve kullanılmayan dosya kaynaklarına referansları kaldırmak için kaynak tablosunu değiştirerek küçültülmüş uygulamanızın boyutunu daha da küçültebilir. Yeni kaynak düzenleyici, kullanılmayan dosya kaynaklarını tamamen silerek uygulamanızın boyutunu daha küçük hale getirebilir. Bu davranış henüz varsayılan olarak etkin değildir ancak projenizin gradle.properties dosyasına android.experimental.enableNewResourceShrinker.preciseShrinking=true deneysel seçeneğini ekleyerek bu davranışı denemek için etkinleştirebilirsiniz.

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

Eski uygulamanın, Android Gradle eklentisi 8.0.0'dan kaldırılması planlanmıştır.

Derleme varyantı yayınlama

Android Gradle eklentisinin 7.1.0 ve sonraki sürümleri, Apache Maven deposunda yayınlanacak derleme varyantlarını yapılandırmanıza olanak tanır. AGP, yeni yayınlama DSL'sini temel alan bir veya daha fazla derleme varyantına sahip bir bileşen oluşturur. Bu bileşeni kullanarak bir yayını Maven deposuna göre özelleştirmek için kullanabilirsiniz. Varsayılan olarak hiçbir bileşen oluşturulmayacağı için önceki sürümlere kıyasla bu sayede gereksiz işlerin önüne geçilir. Daha fazla bilgi edinmek için yayınlama kodu örneğine bakın.

Javadoc JAR'si Yayınlama

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

Kaynakları JAR yayınlama

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

Hata analizi bloku semantik değişikliği

Bir sorunun belirtilen önem düzeyini (enable, disable/ignore, informational, warning, error, fatal) geçersiz kılan tüm lint yöntemleri artık yapılandırma sırasına uyuyor. Örneğin, finalizeDsl() ürününde bir sorunun önemli olarak ayarlanması artık ana DSL'de devre dışı bırakılmasını geçersiz kılar. Daha fazla bilgi için lint{} blok referans belgeleri ile Android derleme akışı ve uzantı noktalarını inceleyin.

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

Ayrıca, Navigasyon Güvenli Arama'nın 2.4.1 ve 2.5.0 sürümleri artık AGP 4.2 ile çalışmayacaktır. Güvenli Arama'ların bu sürümlerini kullanmak için AGP 7.0 ve sonraki sürümlerini kullanmanız gerekir.

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

AGP 8.0'dan itibaren otomatik bileşen oluşturma varsayılan olarak devre dışı olacaktır. Şu anda AGP 7.1, her derleme varyantı için otomatik olarak derleme varyantıyla aynı ada sahip bir bileşen ve tüm derleme varyantlarını içeren bir all bileşeni oluşturmaktadır. Bu otomatik bileşen oluşturma devre dışı bırakılacak. Yeni davranışa geçiş yapmak için android.disableAutomaticComponentCreation ayarını true. yaparak 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 otomatik olarak 1.4.1 sürümüne güncellemez. Bu nedenle, firebase-perf kullanıyor ve AGP'yi 7.1 sürümüne yükseltmek istiyorsanız bu yeni sürüme geçirme işlemini manuel olarak yapmanız gerekir.

Bilinen sorunlar

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

Hilt eklentisini kullanan bir uygulama projesini test etmeyle ilgili sorunlar

Birim testi sınıf yolu, araç içermeyen uygulama sınıflarını içerir. Yani Hilt, birim testlerini çalıştırırken uygulama sınıflarını bağımlılık yerleştirmeyi ele alacak şekilde ayarlamaz.

Bu sorun, 7.1.1 sürümüyle birlikte düzeltilecektir (213534628 numaralı soruna bakın).