Android Gradle Eklentisi 3.6.0 (Şubat 2020)

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

3.6.4 (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.

Yeni özellikler

Android Gradle eklentisinin bu sürümü aşağıdaki yeni özellikleri içerir.

Görünüm Bağlama

Görünüm bağlama, kodunuzdaki görünümlere başvururken derleme zamanı güvenliği sağlar. Artık findViewById() öğesini, otomatik oluşturulan bağlama sınıfı referansıyla değiştirebilirsiniz. Görünüm bağlamayı kullanmaya başlamak için her bir modülün build.gradle dosyasına aşağıdaki kodu ekleyin:

      android {
          viewBinding.enabled = true
      }
      
      android {
          viewBinding.enabled = true
      }
      

Daha fazla bilgi edinmek için Bağlama belgelerini okuyun.

Maven Publish eklentisi için destek

Android Gradle eklentisi, derleme yapılarını Apache Maven deposunda yayınlamanıza olanak tanıyan Maven Publish Gradle eklentisi için destek içerir. Android Gradle eklentisi, uygulama veya kitaplık modüllerinizdeki her derleme varyantı yapısı için bir bileşen oluşturur. Bu bileşeni kullanarak, bir yayını Maven deposuna göre özelleştirebilirsiniz.

Daha fazla bilgi edinmek için Maven Publish eklentisinin nasıl kullanılacağı ile ilgili sayfaya gidin.

Yeni varsayılan sunum aracı

Eklenti, uygulamanızın hata ayıklama sürümünü oluştururken APK'nızı oluşturmak için zipflinger adlı yeni bir paketleme aracı kullanır. Bu yeni araç, derleme hızında iyileştirmeler sağlayacaktır. Yeni paketleme aracı beklediğiniz gibi çalışmıyorsa lütfen hata bildiriminde bulunun. gradle.properties dosyanıza aşağıdakileri ekleyerek eski paketleme aracını kullanmaya geri dönebilirsiniz:

        android.useNewApkCreator=false
      

Yerel derleme ilişkilendirmesi

Artık Clang'ın projenizdeki her C/C++ dosyasını oluşturup bağlaması için gereken süreyi belirleyebilirsiniz. Gradle, bu derleyici etkinliklerine ait zaman damgalarını içeren bir Chrome izlemesi oluşturabilir. Böylece projenizi oluşturmak için gereken süreyi daha iyi anlayabilirsiniz. Bu derleme ilişkilendirme dosyasının çıktısını almak için aşağıdakileri yapın:

  1. Gradle derlemesi çalıştırırken -Pandroid.enableProfileJson=true işaretini ekleyin. Örneğin:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Chrome tarayıcıyı açın ve arama çubuğuna chrome://tracing yazın.

  3. Yükle düğmesini tıklayın ve dosyayı bulmak için <var>project-root</var>/build/android-profile konumuna gidin. Dosyanın adı profile-<var>timestamp</var>.json.gz.

Yerel derleme ilişkilendirme verilerini görüntüleyicinin üst kısmına yakın bir yerde görebilirsiniz:

Chrome&#39;da yerel derleme ilişkilendirme izlemesi

Davranış değişiklikleri

Eklentinin bu sürümünü kullanırken davranışta aşağıdaki değişikliklerle karşılaşabilirsiniz.

Varsayılan olarak sıkıştırılmamış şekilde paketlenmiş yerel kitaplıklar

Uygulamanızı oluştururken, eklenti artık extractNativeLibs öğesini varsayılan olarak "false" değerine ayarlar. Diğer bir deyişle, yerel kitaplıklarınız sayfa hizalanır ve sıkıştırılmamış olarak paketlenir. Bu, yükleme boyutunun daha büyük olmasına neden olsa da kullanıcılarınız şunlardan faydalanır:

  • Platform, kitaplıkların kopyasını oluşturmadan doğrudan yüklü APK'dan yerel kitaplıklara erişebildiğinden daha küçük uygulama yükleme boyutu.
  • APK'nıza veya Android App Bundle'ınıza sıkıştırılmamış yerel kitaplıklar eklediğinizde Play Store sıkıştırması genellikle daha iyi sonuç verir. Bu nedenle, indirme boyutu daha küçüktür.

Android Gradle eklentisinin bunun yerine sıkıştırılmış yerel kitaplıkları paketlemesini istiyorsanız aşağıdakileri uygulamanızın manifest dosyasına ekleyin:

        <application
          android:extractNativeLibs="true"
          ... >
        </application>
        
      

Not: extractNativeLibs manifest özelliği, useLegacyPackaging DSL seçeneğiyle değiştirildi. Daha fazla bilgi için Sıkıştırılmış yerel kitaplıkları paketlemek için DSL'yi kullanma adlı sürüm notuna bakın.

Varsayılan NDK sürümü

NDK'nın birden fazla sürümünü indirirseniz Android Gradle eklentisi artık kaynak kodu dosyalarınızı derlerken kullanılacak varsayılan sürümü seçiyor. Eklenti önceden NDK'nın indirilen en son sürümünü seçiyordu. Eklentinin seçtiği varsayılan değeri geçersiz kılmak için modülün build.gradle dosyasındaki android.ndkVersion özelliğini kullanın.

Basitleştirilmiş R sınıfı oluşturma

Android Gradle eklentisi, projenizdeki her kitaplık modülü için yalnızca bir R sınıfı oluşturarak ve bu R sınıflarını diğer modül bağımlılıklarıyla paylaşarak derleme sınıf yolunu basitleştirir. Bu optimizasyon, derlemelerin daha hızlı olmasını sağlar ancak aşağıdakileri göz önünde bulundurmanız gerekir:

  • Derleyici, R sınıflarını yukarı akış modülü bağımlılıklarıyla paylaştığından projenizdeki her modülün benzersiz bir paket adı kullanması önemlidir.
  • Bir kitaplığın R sınıfının diğer proje bağımlılıklarına görünürlüğü, kitaplığı bağımlılık olarak dahil etmek için kullanılan yapılandırma tarafından belirlenir. Örneğin, A Kitaplığı "api" bağımlılığı olarak B Kitaplığı'nı içeriyorsa A Kitaplığı ve A Kitaplığı'na bağlı olan diğer kitaplıklar, Kitaplığı B'nin R sınıfına erişebilir. Ancak diğer kitaplıklar, B Kitaplığı'nın R sınıfına erişemeyebilir. A Kitaplığı, implementation bağımlılık yapılandırmasını kullanıyorsa. Daha fazla bilgi edinmek için bağımlılık yapılandırmaları hakkındaki bilgileri okuyun.

Varsayılan yapılandırmada eksik olan kaynakları kaldırın

Kitaplık modüllerinde, varsayılan kaynak grubuna dahil etmediğiniz bir dil için kaynak eklerseniz (örneğin, /values-es/strings.xml içinde dize kaynağı olarak hello_world ekler ancak bu kaynağı /values/strings.xml içinde tanımlamazsanız) Android Gradle eklentisi projenizi derlerken artık bu kaynağı içermez. Bu davranış değişikliği, daha az Resource Not Found çalışma zamanı istisnasına neden olacak ve derleme hızını artıracaktır.

D8 artık ek açıklamalar için CLASS saklama politikasına uyuyor

D8, uygulamanızı derlerken artık ek açıklamaların CLASS saklama politikası uyguladığını dikkate alıyor ve bu ek açıklamalar çalışma zamanında kullanılamıyor. Bu davranış, daha önce Android Gradle eklentisinin ve D8'in eski sürümlerini kullanarak uygulamanızı derlerken çalışma zamanı sırasında bu ek açıklamalara erişime izin veren API düzeyi 23'e ayarlanır.

Diğer davranış değişiklikleri

  • aaptOptions.noCompress artık tüm platformlarda (hem APK hem de paketler için) büyük/küçük harfe duyarlı değildir ve büyük harfli karakterlerin kullanıldığı yollara uyar.
  • Veri bağlama artık varsayılan olarak artımlı. Daha fazla bilgi edinmek için 110061530 numaralı sorunu inceleyin.

  • RoboElektrik birim testleri de dahil olmak üzere tüm birim testleri artık tamamen önbelleğe alınabilir. Daha fazla bilgi edinmek için 115873047 numaralı sorunu inceleyin.

Hata düzeltmeleri

Android Gradle eklentisinin bu sürümü aşağıdaki hata düzeltmelerini içerir:

  • Robolectric birim testleri, artık veri bağlama kullanan kitaplık modüllerinde desteklenmektedir. Daha fazla bilgi edinmek için 126775542 numaralı sorunu inceleyin.
  • Artık Gradle'ın paralel yürütme modu etkinken connectedAndroidTest görevlerini birden fazla modülde çalıştırabilirsiniz.

Bilinen sorunlar

Bu bölümde, Android Gradle eklentisinin 3.6.0 sürümünde bulunan bilinen sorunlar açıklanmaktadır.

Android Lint görevinin performansı yavaş

Ayrıştırma altyapısındaki bir regresyon nedeniyle Android Lint'in bazı projelerde tamamlanması çok daha uzun sürebilir. Bu da belirli kod yapılarında lambda için tahmin edilen türlerin daha yavaş hesaplamasına neden olur.

Sorun, IDEA'da bir hata olarak bildirilmiş olup Android Gradle Plugin 4.0'da düzeltilecektir.

Manifest sınıfı eksik {:#agp-missing-manifest}

Uygulamanız manifest dosyasında özel izinler tanımlıyorsa Android Gradle eklentisi genellikle özel izinlerinizi dize sabitleri olarak içeren bir Manifest.java sınıfı oluşturur. Eklenti, bu sınıfı uygulamanızla birlikte paketler. Böylece, çalışma zamanında bu izinlere daha kolay başvurabilirsiniz.

Android Gradle eklentisi 3.6.0'da manifest sınıfı oluşturma işlemi çalışmıyor. Uygulamanızı eklentinin bu sürümüyle derliyorsanız ve bu sürüm manifest sınıfına referans veriyorsa bir ClassNotFoundException istisnasıyla karşılaşabilirsiniz. Bu sorunu çözmek için aşağıdakilerden birini yapın:

  • Özel izinlerinize tam nitelikli adlarıyla referans verin. Örneğin, "com.example.myapp.permission.DEADLY_ACTIVITY".

  • Kendi sabitlerinizi aşağıda gösterildiği gibi tanımlayın:

                public final class CustomPermissions {
                  public static final class permission {
                    public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
                  }
                }