Android Gradle Plugin API güncellemeleri

Bu sayfada, Android Gradle eklentisi (AGP) API'lerinin desteğinin sonlandırılması ve kaldırılması izlenir ve kodunuzu buna göre nasıl güncelleyeceğiniz hakkında bilgi verilir.

API desteğinin sonlandırılması ve kaldırılması takipçisi

Aşağıdaki tabloda, AGP API'lerinin kullanımdan kaldırılma ve kaldırılma tarihleri AGP sürümü açısından özetlenmektedir.

API AGP sürümünde desteği sonlandırıldı AGP sürümünden kaldırıldı
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
Dönüştürme 7.2 8.0

AGP 8.8

Aşağıda, AGP 8.8 için önemli API güncellemeleri verilmiştir.

Kaynak yapılandırmalarının desteği sonlandırıldı

Kaynak yapılandırmaları, AGP 8.8'den itibaren desteği sonlandırılmıştır. Bu işlem, AGP artık farklı kaynak yoğunluklarını desteklemediği ve Google Play Console'da artık uygulamaların App Bundle olarak yayınlanmasını gerektirdiği için yapılmıştır. Dil yapılandırması için yerel ayar yapılandırmalarını ilgili kaynaklarla eşlemek üzere localeFilters DSL'sini kullanarak uygulamanızın desteklediği yerel ayarları belirtebilirsiniz.

AGP 8.0

Aşağıda, AGP 8.0 için önemli API güncellemeleri verilmiştir.

Transform API kaldırıldı

AGP 8.0'dan itibaren Transform API'si kaldırılmıştır. Bu, com.android.build.api.transform paketindeki tüm sınıfların kaldırıldığı anlamına gelir.

Derleme performansını iyileştirmek için Transform API kaldırılıyor. Dönüşüm API'sini kullanan projeler, AGP'nin derleme için daha az optimize edilmiş bir akış kullanmasına neden olur. Bu durum, derleme sürelerinde büyük gerilemelere neden olabilir. Dönüşüm API'sini kullanmak ve diğer Gradle özellikleriyle birleştirmek de zordur. Değişim API'leri, performans veya derleme doğruluğu sorunları oluşturmadan AGP'yi genişletmeyi kolaylaştırmayı amaçlar.

Değişim API'leri

Transform API'nin tek bir yerine geçecek bir API yoktur. Her kullanım alanı için yeni, hedeflenmiş API'ler vardır. Yeni API'lerin tümü androidComponents {} bloğundadır. Bu API'lerin tümü AGP 7.2 ile kullanılabilir.

Kod dönüştürme desteği

Kod dizini dönüştürmek için Instrumentation API'yi kullanın. Kütüphanelerde yalnızca yerel proje sınıfları için bir araç kaydedebilirsiniz. Uygulamalar ve testler için ise bir enstrümantasyonu yalnızca yerel sınıflar veya yerel ve uzaktan bağımlılıklar dahil olmak üzere tüm sınıflar için kaydedebilirsiniz. Bu API'nin kullanılabilmesi için araçlar her sınıfta bağımsız olarak çalışır ve sınıf yolundaki diğer sınıflara sınırlı erişim sağlar (daha fazla bilgi için bkz. createClassVisitor()). Bu kısıtlama, hem tam hem de artımlı derlemelerin performansını iyileştirir ve API yüzeyini basit tutar. Her kütüphane, tüm derleme tamamlandıktan sonra değil, hazır olur olmaz paralel olarak enstrümante edilir. Ayrıca tek bir sınıftaki bir değişiklik, yalnızca etkilenen sınıfların artımlı bir derlemede yeniden enstrümantasyonunu yapması gerektiği anlamına gelir. Instrumentation API'nin nasıl kullanılacağına dair örnek için ASM ile sınıfları dönüştürme APG tarifine bakın.

Oluşturulan sınıfları uygulamanıza ekleme desteği

Uygulamaya oluşturulmuş başka sınıflar eklemek için MultipleArtifact.ALL_CLASSES_DIRS ile Artifacts API'sini kullanın. Özel olarak,

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toAppend(Artifact.Multiple)

MultipleArtifact.ALL_CLASSES_DIRS ile proje sınıflarına oluşturulan ek dizinleri eklemek için Artifacts API, özel görevinizin çıktısının verileceği benzersiz bir konumu otomatik olarak seçer. Bu API'nin nasıl kullanılacağına dair örnek için addToAllClasses tarifine bakın.

Tüm program analizine dayalı dönüşümler için destek

Tüm program analizine dayalı dönüşümler uygulamak için tüm sınıflar tek bir görevde birlikte dönüştürülebilir. Instrumentation API'yi kullanmaktan çok daha yüksek bir derleme performans maliyeti olduğundan bu yaklaşım dikkatli bir şekilde kullanılmalıdır. Eklentiniz bu API'yi kullanıyorsa uygulama geliştiricisinin geliştirme derlemelerinde bu API'yi devre dışı bırakabilmesi için dönüşümün her derleme türüne göre dahil edilmesi önerilir.

Tüm sınıfları birlikte dönüştüren bir görev kaydetmek için Android Gradle eklentisi 7.4, Artifacts.forScope API'sini kullanıma sunar. Mevcut projedeki tüm sınıfları dönüştürmek için Artifacts.forScope.PROJECT seçeneğini kullanın. Mevcut projedeki tüm sınıfları, içe aktarılan projeleri ve tüm harici bağımlılıkları dönüştürmek için Artifacts.forScope.ALL değerini kullanın. Aşağıdaki kodda, tüm sınıfları birlikte dönüştüren bir görev kaydetmek için Artifacts.forScope.ALL'ün nasıl kullanılacağı gösterilmektedir:

variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
    .use(taskProvider)
    .toTransform(
        ScopedArtifact.CLASSES,
        ModifyClassesTask::allJars,
        ModifyClassesTask::allDirectories,
        ModifyClassesTask::output,
    )

Bu API'nin nasıl kullanılacağına dair örnek için modifyProjectClasses tarifine, Android derleme türlerine özel uzantıların nasıl kaydedileceğine dair örnek için customizeAgpDsl tarifine bakın.

Kullanım alanınız AndroidComponents API'lerinden hiçbirini kapsamıyorsa lütfen hata kaydı gönderin.

Yaygın olarak kullanılan bazı eklentiler, Firebase performans izleme eklentisi (1.4.1, AGP 8.0 ile uyumludur) ve Hilt Gradle eklentisi (2.40.1, AGP 8.0 ile uyumludur) dahil olmak üzere bu yeni API'leri kullanmaya zaten geçiş yaptı. AGP Yükseltme Asistanı, proje geliştiricilerinin yaygın olarak kullanılan eklentileri gerektiğinde yükseltmelerine de yardımcı olur.

Transform API'yi üçüncü taraf eklentisi aracılığıyla kullanıyorsanız lütfen eklentinin yazarına, eklentisinin AGP 8.0 için yeni API'lerle çalışacak şekilde güncellenmesi gerektiğini bildirin.

AGP 7.2

Aşağıda, AGP 7.2 için önemli API güncellemeleri verilmiştir.

RenderScript kullanımdan kaldırıldı

AGP 7.2'den itibaren RenderScript API'lerinin desteği sonlandırıldı. Bunlar çalışmaya devam edecek ancak uyarılar çağıracak ve AGP'nin gelecekteki sürümlerinde tamamen kaldırılacaktır. RenderScript'ten geçiş yapmayla ilgili yol gösterici bilgiler için RenderScript'ten geçiş yapma başlıklı makaleyi inceleyin.

Component.transformClassesWith ve Component.setAsmFramesComputationMode desteği sonlandırıldı

AGP 7.2'den itibaren Component.transformClassesWith ve Component.setAsmFramesComputationMode sınıf bayt kodu aracı API'leri kullanımdan kaldırılmıştır. Bu API'ler, enstrümantasyon sürecini yapılandırmayla ilgili tüm API'leri içeren yeni bir blok olan Component.instrumentation'e taşındı. Bu enstrümantasyon özelliklerini kullanmaya devam etmek için aşağıdaki kod snippet'inde gösterildiği gibi yeni bloktaki ilgili API'leri kullanın:

androidComponents {
      onVariants(selector().all(), {
          instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
                                               InstrumentationScope.Project) { params ->
              params.x = "value"
          }
          instrumentation.setAsmFramesComputationMode(
              COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
          )
      })
  }