Android Gradle Eklentisi 8.3.0 (Şubat 2024)

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

Uyumluluk

Android Gradle eklentisi 8.3'ün desteklediği maksimum API düzeyi, API düzeyi 34'tür. Diğer uyumluluk bilgileri:

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

Android Gradle eklentisi 8.3'teki yeni özellikler şunlardır:

Yama sürümleri

Android Studio Iguana ve Android Gradle eklentisi 8.3'teki yama sürümleri aşağıda listelenmiştir.

Android Studio Iguana | 2023.2.1 Patch 2 ve AGP 8.3.2 (Nisan 2024)

Bu küçük güncelleme hata düzeltmelerini içerir.

Android Studio Iguana | 2023.2.1 Patch 1 ve AGP 8.3.1 (Mart 2024)

Bu küçük güncelleme hata düzeltmelerini içerir.

Gradle Sürüm Katalogları için destek

Android Studio, bağımlılıkları tek bir merkezi konumda yönetmenize ve modüller veya projeler arasında paylaşmanıza olanak tanıyan bir özellik olan TOML tabanlı Gradle Sürüm Katalogları'nı destekler. Android Studio artık düzenleyici önerileri ve Proje Yapısı iletişim kutusuyla entegrasyon sayesinde sürüm kataloglarını yapılandırmayı kolaylaştırıyor. Gradle sürüm kataloglarını ayarlamayı ve yapılandırmayı veya derlemenizi sürüm kataloglarına taşımayı öğrenin.

Kod tamamlama ve gezinme

Android Studio, TOML dosya biçiminde bir sürüm kataloğunu düzenlerken veya bir sürüm kataloğundan derleme dosyasına bağımlılık eklerken kod tamamlama özelliği sunar. Kod tamamlama özelliğini kullanmak için Ctrl+Boşluk (macOS'te Command+Boşluk) tuşlarına basın. Ayrıca, uygulamanızın build.gradle dosyasındaki bir bağımlılık referansından, Ctrl+b (macOS'te Command+b) tuşlarına basarak sürüm kataloğunda bildirildiği yere hızlıca gidebilirsiniz.

Bağımlılık eklerken kodu tamamlama

Proje Yapısı iletişim kutusuyla entegrasyon

Projenizde TOML dosya biçiminde tanımlanmış bir sürüm kataloğu kullanılıyorsa Android Studio'daki Proje Yapısı iletişim kutusu Değişkenler görünümü (Dosya > Proje Yapısı > Değişkenler) aracılığıyla burada tanımladığınız değişkenleri düzenleyebilirsiniz. Her sürüm kataloğu için, o katalogdaki değişkenlerin listelendiği bir açılır liste bulunur. Bir değişkeni düzenlemek için değerini tıklayın ve üzerine yazın. Bu değişiklikleri kaydettiğinizde TOML dosyası buna göre güncellenir.

Proje Yapısı iletişim kutusundaki sürüm kataloğundan alınan değişkenler

Bağımlılıkları Proje Yapısı iletişim kutusundaki Bağımlılıklar görünümünde (Dosya > Proje Yapısı > Bağımlılıklar) da güncelleyebilirsiniz. Proje Yapısı iletişim kutusunu kullanarak sürümleri güncellemek için düzenlemek istediğiniz modüle ve bağımlılığa gidin, ardından İstenen Sürüm alanını güncelleyin. Bu değişiklikleri kaydettiğinizde TOML dosyası buna göre güncellenir. Bağımlılık sürümü bir değişken kullanılarak tanımlandıysa sürümü doğrudan bu şekilde güncellemenin değişkeni sabit kodlanmış bir değerle değiştireceğini unutmayın. Ayrıca, Project Structure (Proje Yapısı) iletişim kutusunu kullanıp kullanmadığınıza bakılmaksızın, bir bağımlılığı derleme dosyasından kaldırmanın bağımlılığı sürüm kataloğundan kaldırmadığını unutmayın.

Proje Yapısı iletişim kutusundaki sürüm kataloğundan bağımlılıklar

Bilinen sorunlar ve sınırlamalar

Android Studio'da Gradle Sürüm Katalogları desteğiyle ilgili bilinen sorunlar veya sınırlamalar aşağıda belirtilmiştir.

  • Kotlin komut dosyalarında eklenti takma adı bildirimlerini vurgularken hata: alias(libs.plugins.example) biçiminde bir eklenti bildirimi eklediğinizde düzenleyici, libs bölümünün altına kırmızı bir alt çizgi ekler. Bu, Gradle'ın 8.0 ve önceki sürümlerinde bilinen bir sorundur ve Gradle'ın gelecekteki bir sürümünde çözülecektir.

  • Android Studio'da yalnızca TOML biçimindeki sürüm katalogları desteklenir: Şu anda Android Studio'da kod tamamlama, gezinme ve Proje Yapısı iletişim kutusu desteği yalnızca TOML dosyası biçiminde tanımlanan sürüm katalogları için kullanılabilir. Ancak, doğrudan settings.gradle dosyasına bir sürüm kataloğu ekleyebilir ve bağımlılıklarını projenizde kullanabilirsiniz.

  • KTS derleme dosyaları için gezinme desteklenmiyor: Control+tıklama (macOS'te Command+tıklama) kullanarak sürüm kataloğundaki bir bağımlılık tanımına gitme, Kotlin komut dosyası kullanılarak yazılan derleme dosyaları için henüz desteklenmemektedir.

  • Firebase Asistan, bağımlılıkları doğrudan derleme komut dosyalarına ekler: Firebase Asistan, bağımlılıkları sürüm katalogları aracılığıyla değil, doğrudan derleme komut dosyalarınıza ekler.

  • "Kullanım yerlerini bul" işlevi desteklenmiyor: Derleme dosyası KTS veya Groovy'de olsa da, sürüm kataloğu değişkeninin diğer derleme dosyalarındaki kullanım yerlerini bulma henüz desteklenmiyor. Yani, bir sürüm kataloğundaki değişken tanımında Control+tıklama (macOS'te Command+tıklama) kullanıldığında değişkenin kullanıldığı derleme dosyalarına gidilmez.

  • Android Studio'daki Proje Yapısı iletişim kutusu, kök gradle klasöründe bulunan birden fazla katalog dosyasını gösterir ancak bileşik derlemeye ait katalogları göstermez. Örneğin, biri uygulamanız, diğeri de birleşik derlemeniz için olmak üzere iki katalog dosyanız varsa Proje Yapısı iletişim kutusunda yalnızca uygulama kataloğu dosyası gösterilir. Bileşik derleme kullanabilirsiniz ancak TOML dosyasını doğrudan düzenlemeniz gerekir.

Ek SDK analizleri: politika sorunları

Android Studio, build.gradle.kts ve build.gradle dosyalarında ve Google Play SDK Dizini'nde Play politikası ihlalleri olan herkese açık SDK'lar için Proje Yapısı İletişim Kutusu'nda lint uyarıları gösterir. Play politikalarını ihlal eden tüm bağımlılıkları güncellemeniz gerekir. Aksi takdirde, bu ihlaller gelecekte Google Play Console'da yayın yapmanızı engelleyebilir. Politika ihlali uyarıları, Android Studio'nun gösterdiği eski sürüm uyarılarını tamamlar.

Android Studio compileSdk sürümü desteği

Projenizde Android Studio'nun mevcut sürümü tarafından desteklenmeyen bir compileSdk kullanılıyorsa Android Studio bir uyarı gösterir. Kullanılabiliyorsa projeniz tarafından kullanılan compileSdk sürümünü destekleyen bir Android Studio sürümüne geçmenizi de önerir. Android Studio'yu yükseltmek için AGP'yi de yükseltmeniz gerekebileceğini unutmayın. AGP, projeniz tarafından kullanılan compileSdk mevcut AGP sürümü tarafından desteklenmiyorsa Build (Derleme) araç penceresinde bir uyarı da gösterir.

Lint davranış değişiklikleri

Android Gradle eklentisi 8.3.0-alpha02'den itibaren, bir modülde lint çalıştırıldığında modülün ana ve test bileşenleri için ayrı lint analiz görevleri çalıştırılır. Bu değişikliğin nedeni performansı artırmaktır. Önceki davranışa dönmek için android.experimental.lint.analysisPerComponent=false dosyanızda android.experimental.lint.analysisPerComponent=false değerini ayarlayın.gradle.properties

Varsayılan olarak hassas kaynak küçültme

Kullanılmayan girişleri resources.arsc dosyasından kaldıran ve kullanılmayan kaynak dosyalarını ortadan kaldıran hassas kaynak küçültme özelliği varsayılan olarak etkindir. Bu küçültme etkinleştirildiğinde kaynak tablonuz küçülür ve APK'ya yalnızca referans verilen res klasör girişleri dahil edilir.

Tam kaynak küçültmeyi devre dışı bırakmak için projenizin gradle.properties dosyasında android.enableNewResourceShrinker.preciseShrinking değerini false olarak ayarlayın.

Çözülen sorunlar

Android Gradle eklentisi 8.3.0

Çözülen Sorunlar
Android Gradle eklentisi
Build cache is redundant for PackageForUnitTest task
[AGP 8.1.0] Hem splits.abi.isEnable hem de testOptions.unitTests.isIncludeAndroidResources doğruysa ./gradlew test, "Unable to find manifest output" (Manifest çıkışı bulunamadı) hatasıyla başarısız oluyor
AGP model oluşturma, iç içe yerleştirilmiş Gradle bileşik derlemeleriyle başarısız oluyor
Kaynak küçültücü, kaynak kimliklerini bozarak çalışma zamanında kilitlenmelere neden oluyor
Minimum Gradle sürümü kontrolü, ikinci derlemede ve sonrasında çalışmaz.
AGP 8.0.2'den 8.1.0'a güncellendikten sonra ":app:mergeReleaseClasses" görevinin yürütülmesi başarısız oldu
[Gradle 8.4][upgrade] Kotlin Gradle eklentisinde kullanımdan kaldırılan özellik kullanıldığı için yükseltme işleminden sonra entegrasyon testi başarısız oluyor
Yapılandırma aşamasında manifest yer paylaşımı dosyalarının varlığını kontrol etme
MergeJavaResWorkAction hatasıyla ilgili Gradle dokümanına giden bağlantı bozuk
Gradle 8.1, .gradle/.android/analytics.settings nedeniyle yapılandırma önbelleğe almayı bozuyor
AGP, ProjectComponentIdentifier.build olmadan ProjectComponentIdentifier.projectPath kullanmamalıdır.
Lütfen AGP "Analytics other plugin to proto: ..." için bilgi düzeyindeki günlük kaydını azaltın/kaldırın.
[Gradle 8.4][upgrade] File operation during configuration in ProcessJavaResTask breaks config caching
Sembol tablosunu (R.txt) almak için kullanılan Variant API
lint bağımsız eklentisi, gradleApi() bağımlılığını düzgün şekilde ele almıyor
AGP sınıflarında/özelliklerinde kDocs kalitesinin düşük olması. `VariantOutput.enable` ifadesinin `VariantOutput.enable` ile değiştirilmesi öneriliyor.
AGP 8.3.0-alpha02, Windows ana makinelerine yayın profilleri yükleyemiyor
`android.enableDexingArtifactTransform=true` seçeneğini zorunlu kılma
[Gradle 8.4][upgrade] Yapılandırma aşamasındaki dosya işleme nedeniyle yükseltme işleminden sonra entegrasyon testi başarısız oluyor
AGP 8.3.0-alpha-02 - "Error: Failed to deserialize cached resource repository." (Hata: Önbelleğe alınan kaynak deposu seri durumdan çıkarılamadı.)
[Gradle 8.4][upgrade] Integration test failure after upgrade due file handling in configuration phase of TestLabBuildService
AGP 8.1.0, enstrümanlı testler çalıştırıldıktan sonra uygulamayı kaldırıyor. 7.4.2'de bu sorun yok.
APK dönüştürme işlemi, ListingFileRedirectTask ile ilgili bir hataya neden oluyor
ASSETS yapıtının dönüştürülmesi, bozuk giriş/çıkış konumlarına neden oluyor
android.experimental.r8.dex-startup-optimization=true değerini varsayılan olarak yükseltme
Yeni Gradle yapılandırma hizalama API'sine geçiş
Kotlin derleyici IDEA 21.3'e güncellenmeye çalıştığında kaynak derleme başarısız oluyor
Artifacts API ile reaktif get()
"android.lint.printStackTrace" AGP özelliğini kararlı sürüme yükseltme
AGP 8.1.0: dynamic feature: Implicit dependency between exportReleaseConsumerProguardFiles and extractProguardFiles cause compilation errors
`variant.unitTest.jniLibs.addGeneratedSourceDirectory` herhangi bir işlem yapmıyor gibi görünüyor
Gradle 8.4 ile uyumluluk için AGP'de kullanılan XML ayrıştırıcısını güncelleme
AGP 8.0.1 sürüm paketi jacoco instrument etkili olmuyor
HEDGEHOG REGRESSION: Çalıştır düğmesi birkaç saniye gecikiyor (Creating spec)
AGP 8.3.0-alpha11, android.content.res.Resources$NotFoundException ile başlatılırken kilitlenen bir sürüm APK'sı oluşturuyor
"android.lint.printStackTrace" AGP özelliğini kararlı sürüme yükseltme
Özellik isteği: com.android.build.api.extension.impl.CURRENT_AGP_VERSION'ı herkese açık bir API'ye yükseltme
SDK Yöneticisi, stdout'a günlük bilgisi göndermeyi durdurmalıdır.
DexArchiveBuilderTaskDelegate, yalnızca kaynak kitaplığı modülüyle başarısız oldu
AGP7.4 özel eklenti varyantı, tüm dönüştürme işlemleri için META-INF/MANIFEST.MF istisnası nedeniyle yinelenen giriş oluşturuyor
Yeni Manifest etiketlerini destekleme,
Studio ayarlarındaki "ayrılmış projeler" bağlantısı yanlış yere gidiyor.
Lütfen oluşturulan kaynakları Javadoc ve SourceJar'a dahil etme seçenekleri sunun.
compileSdk ile minCompileSdkVersion içeren bağımlılık arasındaki tutarsızlık için hızlı düzeltme gerekiyor
[Gradle] tools:overrideLibrary, yıldız işaretini (*) desteklemelidir.
Manifest düzenlenirken kullanıcı arayüzünün donması
AGP 8.2.0'da JaCoCo sürümü ayarlanamıyor
Dinamik özelliklerin kullanıldığı projede Android Gradle eklentisi 8.2.0 yükleme görevi başarısız oluyor
Dinamik özelliklerin kullanıldığı projede Android Gradle eklentisi 8.2.0 yükleme görevi başarısız oluyor
Dexer (D8)
[desugared library] Desugared library 2.1 sürümü, R8'in önceki sürümleriyle uyumlu değil
Optimizasyonlar yalnızca D8 ile bile çalışır mı?
Lint
[Lint] TranslucentViewDetector, filterIncident işlevinde kilitleniyor ve lint'in yanlış sonuç üretmesine neden oluyor
TranslucentViewDetector, "behind" değerini kabul etmelidir.
Android Lint, "property 'variantInputs.name' doesn't have a configured value." (variantInputs.name özelliği yapılandırılmış bir değere sahip değil) hatasıyla KMP kitaplığında başarısız oluyor.
TranslucentViewDetector, manifestte yanlış satırı bildiriyor
lintDebug, proje bağımlılıkları kullanılırken UseTomlInstead uyarılarını yanlışlıkla bildiriyor
Android Lint tarafından işaretlenen başka bir projeden kaynaklanan beklenmedik sorunlar
LINT, bağlama ve tıklama işleyicisi içinde kullanılmayan kaynakla ilgili yanlış pozitif algılama kontrolü yapıyor.
Özel lint kontrolü jar dosyası yüklenemedi: Node, TreeNode'a yayınlanamıyor
Lint visitAnnotationUsage, değişken tanımlamalarında açıklama eklenmiş sınıfların kullanımları için çağrılmıyor
Lint 31.0.2, java.util.NoSuchElementException: Array is empty. (Dizi boş) hatasıyla başarısız oluyor.
kotlin.text.MatchNamedGroupCollection#get(String) için API 26 gerektiren Lint uyarısı yok
lint:TypographyQuotes yanlış negatifleri: birden fazla kaçış karakteri eklenmiş kesme işareti yoksayılıyor
AGP 8.0.2 lint InvalidId detector false positive
LintError sorunları, lint temel çizgilerine eklendi
Quickfix Lint çalışmıyor ve IDE hatasına neden oluyor
Kısmi analiz nedeniyle tutarsız test hatası
Yanlış pozitif olan bir uyarıyı geçersiz şekilde vurgulama
Lint visitAnnotationUsage, değişken tanımlamalarında açıklama eklenmiş sınıfların kullanımları için çağrılmıyor
Kullanılmayan Kaynak İşlemcisi, Gradle derleme dosyasını silebilir
NewApi lint kontrolü, "isAtleastU() && otherCondition()" son alanını anlamıyor
StackOverflow from `LintClient.getSdkHome`
Android Studio / Lint, "platform" bağımlılıklarının güncel olmadığını bildirmez
Hata: Firebase-bom bağımlılığını güncelleme önerisi yok
Proje Yapısı (ve Gradle (?)), daha yeni bir sürüme yükseltilecek Firebase BOM bağımlılıklarını keşfetmiyor.
Lint Entegrasyonu
testImplementation bağımlılığından kaynaklanan DuplicatePlatformClasses lint hatası
Shrinker (R8)
AGP 8.0.2'den 8.1.0'a yükseltme işleminden sonra R8 çalışmıyor
isShrinkResources, 8.3.0-alpha11 ile alpha14 sürümlerinde aşırı optimizasyon yapıyor
AGP 8.2.0 ile R8 Flurry SDK'sının kilitlenmesi
Android - R8, LinearLayoutManager alt sınıfının kilitlenmesine neden oluyor
R8 v8.2.33, yükseltme işleminden sonra "java.lang.VerifyError: Bad type on operand stack" çalışma zamanı kilitlenmesi
[R8 8.3.21] R8 8.3.21, R8 8.1.56'dan 1,57 MB daha büyük
[R8 8.3.21] R8 8.3.21, R8 8.1.56'dan 1,57 MB daha büyük
class.getInterfaces() boş döndürüyor
Test SimpleKotlinEnumUnboxingTest, kotlin_dev bot'unda başarısız oluyor

Android Gradle eklentisi 8.3.1

Çözülen Sorunlar
Android Gradle eklentisi
MergeJavaResourcesTask artımlı giriş işleme sorunu
Lint Entegrasyonu
Lint, AGP 8.3.0-rc02'de kardeş kaynak kümelerinin türlerini çözemiyor

Android Gradle eklentisi 8.3.2

Çözülen Sorunlar
Android Gradle eklentisi
AGP 8.3'te desugaring etkinleştirildiğinde kilitlenme sorunu yaşanabilir
AGP 8.3, zipApksForTask'ı bozuyor
Lint Entegrasyonu
Lint, KMP bağımlılığını netleştiremiyor