Android Gradle Plugin 3.4.0 (Nisan 2019)

Android eklentisinin bu sürümü için gerekenler:

3.4.3 (Temmuz 2020)

Bu küçük güncelleme, Android 11'de paket görünürlüğü ile ilgili yeni varsayılan ayarlar ve özelliklerle uyumluluğu destekler.

Ayrıntılar için 4.0.1 sürüm notlarına bakın.

3.4.2 (Temmuz 2019)

Android Studio 3.4.2'yi destekleyen bu küçük güncelleme, çeşitli hata düzeltmeleri ve performans iyileştirmeleri içerir. Dikkate değer hata düzeltmelerinin listesini görmek için Sürüm Güncellemeleri blogundaki ilgili yayını okuyun.

3.4.1 (Mayıs 2019)

Android Studio 3.4.1'i destekleyen bu küçük güncelleme, çeşitli hata düzeltmeleri ve performans iyileştirmeleri içerir. Dikkate değer hata düzeltmelerinin listesini görmek için Sürüm Güncellemeleri blogundaki ilgili yayını okuyun.

Yeni özellikler

  • Yeni lint denetimi bağımlılık yapılandırmaları: lintChecks davranışı değişti ve Android kitaplıklarınızda hangi lint denetimlerinin paketleneceği üzerinde daha fazla kontrol sahibi olmanızı sağlamak için lintPublish adlı yeni bir bağımlılık yapılandırması kullanıma sunuldu.

    • lintChecks: Bu, yalnızca projenizi yerel olarak oluştururken çalıştırmak istediğiniz lint denetimleri için kullanmanız gereken mevcut bir yapılandırmadır. Yayınlanan AAR'ye lint kontrollerini dahil etmek için daha önce lintChecks bağımlılık yapılandırmasını kullandıysanız bu bağımlılıkları, aşağıda açıklanan yeni lintPublish yapılandırmasını kullanacak şekilde taşımanız gerekir.
    • lintPublish: Yayınlanan AAR'ye eklemek istediğiniz lint kontrolleri için kitaplık projelerinde bu yeni yapılandırmayı aşağıda gösterildiği gibi kullanın. Bu, kitaplığınızı kullanan projelerin bu lint kontrollerini de uyguladığı anlamına gelir.

    Aşağıdaki kod örneğinde, yerel bir Android kitaplık projesinde her iki bağımlılık yapılandırması da kullanılmaktadır.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • Genel olarak, paketleme ve imzalama görevlerinde genel bir derleme hızı artışı olması gerekir. Bu görevlerle ilgili bir performans gerilemesi fark ederseniz lütfen hata bildiriminde bulunun.

Davranış değişiklikleri

  • Android Hazır Uygulamalar Özelliği eklentisinin kullanımdan kaldırılmasıyla ilgili uyarı: Hazır uygulamanızı oluşturmak için hâlâ com.android.feature eklentisini kullanıyorsanız Android Gradle eklentisi 3.4.0 tarafından kullanımdan kaldırma uyarısı verilir. Eklentinin gelecekteki sürümlerinde hazır uygulama oluşturmaya devam edebileceğinizden emin olmak için hazır uygulamanızı, tek bir Android App Bundle'dan hem yüklü hem de hazır uygulama deneyimlerinizi yayınlamanıza olanak tanıyan dinamik özellik eklentisini kullanarak taşıyın.

  • R8 varsayılan olarak etkindir: R8; şeker giderme, küçültme, karartma, optimize etme ve kopyalama işlemlerini tek bir adımda birleştirerek derleme performansında gözle görülür iyileşmeler sağlar. Android Gradle eklentisi 3.3.0'da kullanıma sunulan R8, artık eklenti 3.4.0 ve üst sürümlerini kullanan uygulama ve Android kitaplığı projelerinde varsayılan olarak etkin.

Aşağıdaki resimde, R8 kullanıma sunulmadan önceki derleme işlemine üst düzey bir genel bakış sunulmaktadır.

R8'den önce ProGuard, ayıklama ve şekeri ayıklama işlemlerinden farklı bir derleme adımıydı.

Artık R8 ile şeker giderme, küçültme, karartma, optimize etme ve dexing (D8) işlemleri aşağıda gösterildiği gibi tek adımda tamamlanır.

R8'de sudan arındırma, küçültme, karartma, optimize etme ve dexing işlemlerinin tümü tek bir derleme adımında gerçekleştirilir.

R8'in mevcut ProGuard kurallarınızla çalışacak şekilde tasarlandığını hatırlatmak isteriz. Dolayısıyla, R8'den yararlanmak için muhtemelen herhangi bir işlem yapmanız gerekmeyecektir. Ancak özel olarak Android projeleri için tasarlanmış olan ProGuard'dan farklı bir teknoloji olduğundan, küçültme ve optimizasyon, ProGuard'ın sahip olmadığı kodun kaldırılmasıyla sonuçlanabilir. Dolayısıyla, çok düşük olasılıkla da olsa bu kodu derleme çıkışınızda tutmak için ek kurallar eklemeniz gerekebilir.

R8'i kullanırken sorun yaşıyorsanız sorununuzun bir çözümü olup olmadığını kontrol etmek için R8 uyumluluğuyla ilgili SSS sayfasını okuyun. Çözüm belgelenmemişse lütfen hata bildiriminde bulunun. Projenizin gradle.properties dosyasına aşağıdaki satırlardan birini ekleyerek R8'i devre dışı bırakabilirsiniz:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Not: Belirli bir derleme türünde, uygulama modülünüzün build.gradle dosyasında useProguard öğesini false olarak ayarlarsanız Android Gradle eklentisi, projenizin gradle.properties dosyasında R8'i devre dışı bırakıp bırakmamanızdan bağımsız olarak, R8'i kullanarak uygulamanızın kodunu bu derleme türü için küçültür.

  • ndkCompile desteği sonlandırıldı: Yerel kitaplıklarınızı derlemek için ndkBuild kullanmayı denediğinizde artık bir derleme hatası alıyorsunuz. Bunun yerine, Projenize C ve C++ kodu eklemek için CMake veya ndk-build kullanmanız gerekir.

Bilinen sorunlar

  • Benzersiz paket adlarının doğru kullanımı şu anda zorunlu değil ancak eklentinin sonraki sürümlerinde daha katı olacak. Android Gradle eklentisinin 3.4.0 sürümünde, aşağıdaki satırı gradle.properties dosyanıza ekleyerek projenizin kabul edilebilir paket adları tanımlayıp tanımlamadığını kontrol etmek için kaydolabilirsiniz.

              android.uniquePackageNames = true
              
            

    Android Gradle eklentisi aracılığıyla paket adı ayarlama hakkında daha fazla bilgi edinmek için Uygulama kimliğini ayarlama bölümüne bakın.