Android Gradle Plugin API güncellemeleri

Bu sayfada, Android Gradle eklentisi (AGP) API için desteğin sonlandırılması ve kaldırılması, kodunuzu nasıl güncelleyebileceğinize ilişkin bilgiler sağlar.

API desteği sonlandırma ve kaldırma izleyicisi

Aşağıdaki tabloda, AGP API'lerinin AGP sürümünün şartlarına tabidir.

API AGP sürümünde kullanımdan kaldırıldı AGP sürümünden kaldırıldı
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
Oluşturma Komut Dosyası 7.2
Dönüştürme 7.2 8.0

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 başlayarak Dönüştürme API kaldırıldı. Bu, paketteki tüm sınıfların com.android.build.api.transform kaldırıldı.

Transform API, derleme performansını iyileştirmek için kaldırılıyor. Projeler, kullanan derleme için daha az optimize edilmiş bir akış kullanmaya derleme sürelerinde büyük regresyonlara neden olabilir. Ayrıca tek bir yerde toplamak API'yi dönüştürme ve diğer Gradle özellikleriyle birleştirme eski API'lerin yerini alacak performans veya güncelleme sağlamadan AGP'yi genişletmeyi kolaylaştırmayı hedefleyin emin olun.

Yerine Kullanılabilecek API'ler

Transform API tek bir alternatifi yoktur. Yeni, hedeflenmiş Her kullanım alanına özel API'ler. Yeni API'lerin tümü androidComponents {} bloğundadır. Bu API'lerin tümü AGP 7.2'de mevcuttur.

Bayt kodunu dönüştürme desteği

Bayt kodunu 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ç kaydetmelidir; uygulama ve testler için bir enstrümantasyonu sadece yerel sınıflar ya da tüm bağımlılıkları da dahil olmak üzere sınıfları kastediyoruz. Bu API'yi kullanmak için enstrümantasyon her sınıfta bağımsız olarak çalışır ve diğer sınıf yolundaki sınıflar (bkz. createClassVisitor() bakın). Bu kısıtlama, tam ve artımlı derlemeleri içerir ve API yüzeyini basit tutar. Her kitaplık hazır olduğunda paralel olarak takip edilmelidir. derleme tamamlandı. Ayrıca, tek bir sınıftaki değişiklik Dolayısıyla, yalnızca etkilenen sınıfların kademeli olarak seçeceğiz. Enstrümantasyon API'sinin nasıl kullanılacağı hakkında örnek için bkz. ASM ile sınıfları dönüştürme AGP tarifi.

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

Uygulamaya, oluşturulmuş başka sınıflar eklemek için Yapılar Şununla API: MultipleArtifact.ALL_CLASSES_DIRS. Özel olarak,

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

oluşturulan verileri eklemek için MultipleArtifact.ALL_CLASSES_DIRS ile proje sınıflarına ekleyeceksiniz. Artifacts API, otomatik olarak özel görevinizin çıkış oluşturacağı benzersiz bir konum oluşturabilirsiniz. Bkz. addToAllClasses tarifi bu API'nin nasıl kullanılacağını gösteren bir örnek bulabilirsiniz.

Tüm program analizine dayalı dönüşüm desteği

Tüm program analizine dayalı dönüşümler uygulamak için tüm sınıflar dönüştürüldüğünden emin olmanız gerekir. Bu yaklaşım dikkatli kullanılmalıdır. çünkü Enstrümantasyonu kullanmaya kıyasla çok daha yüksek bir derleme performansı maliyetine sahiptir. API'ye gidin. Eklentiniz bu API'yi kullanıyorsa dönüştürme işleminin uygulama geliştiricisinin devre dışı bırakabilmesi için her derleme türüne göre kaydolmalıdır birkaç örnektir.

Tüm sınıfları birlikte dönüştüren bir görevi kaydetmek için Android Gradle eklentisi 7.4 tanıtım amaçlı Artifacts.forScope API'ye gidin. Mevcut projedeki tüm sınıfları dönüştürmek için şunu kullanın: Artifacts.forScope.PROJECT Mevcut projedeki tüm sınıfları dönüştürmek için içe aktarılan projelerin ve tüm dış bağımlılıkların Artifacts.forScope.ALL parametresini kullanın. Aşağıdaki kod, birArtifacts.forScope.ALL dönüştüren bir görev bulunuyor:

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

Bkz. modifyProjectClasses tarifi bu API'nin nasıl kullanılacağına dair bir örnek ve customizeAgpDsl tarifi başlıklı makaleyi inceleyin.

Kullanım alanınız Android Bileşenleri API'ler için lütfen hata bildiriminde bulunun.

Yaygın olarak kullanılan bazı eklentiler, bu yeni API'leri kullanmak için zaten taşınmıştır. Firebase performans izleme eklentisi dahil (1.4.1, AGP 8.0) ve Hilt Gradle eklentisi (2.40.1, AGP 8.0 ile uyumludur). AGP Yükseltme Asistanı, proje geliştiricilerin sık kullanılan uygulamaları yeni sürüme geçirmelerine de yardımcı olur. gerektiği gibi ekleyin.

Transform API'yi bir üçüncü taraf eklentisi aracılığıyla kullanıyorsanız lütfen yazar, eklentilerinin yeni API'larla çalışması için güncellenmesi gerektiğini biliyor. indirin.

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'leri kullanımdan kaldırılmıştır. Devam edecek ve ileride tamamen kaldırılır. AGP sürümlerini kapsıyor. RenderScript'ten geçişle ilgili yardım için bkz. RenderScript'ten taşıma.

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

AGP 7.2'den itibaren sınıf bayt kodu aracı API'leri Component.transformClassesWith ve Component.setAsmFramesComputationMode desteği sonlandırıldı. Yeni bir bloğa (Component.instrumentation) taşındılar. enstrümantasyon sürecinin yapılandırılmasıyla ilgili tüm API'leri içerir. Alıcı: bu araçlardaki özellikleri kullanmaya devam etmek için aşağıdaki kod snippet'inde gösterildiği gibi yeni blok oluşturun:

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