Android Gradle Plugin 3.6.0 (Şubat 2020)

Android eklentisinin bu sürümü için aşağıdakiler gereklidir:

Minimum sürüm Varsayılan sürüm Notlar
Gradle 5.6.4 5.6.4 Daha fazla bilgi için Gradle'i güncelleme başlıklı makaleyi inceleyin.
SDK Oluşturma Araçları 28.0.3 28.0.3 SDK Oluşturma Araçları'nı yükleyin veya yapılandırın.

3.6.4 (Temmuz 2020)

Bu küçük güncelleme, Android 11'de paket görünürlüğü ile ilgili yeni varsayılan ayar 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.

Bağlamayı görüntüleme

Görünüm bağlama, kodunuzda görünümlere referans verirken derleme zamanında güvenlik sağlar. Artık findViewById() değerini otomatik olarak oluşturulan bağlama sınıfı referansıyla değiştirebilirsiniz. Görünüm bağlamayı kullanmaya başlamak için her modülün build.gradle dosyasına aşağıdakileri ekleyin:

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

Daha fazla bilgi edinmek için Görüntü Bağlama Belgesi'ni okuyun.

Maven Yayınlama eklentisi desteği

Android Gradle eklentisi, derleme yapılarını Apache Maven deposunda yayınlamanıza olanak tanıyan Maven Yayınlama Gradle eklentisi için destek içerir. Android Gradle eklentisi, uygulamanızdaki veya kitaplık modülünüzde her bir derleme varyantı yapısını özelleştirmek için kullanabileceğiniz bir bileşen oluşturur. Yayın bir Maven deposunda özelleştirilebilir.

Daha fazla bilgi edinmek için Maven Yayınlama eklentisini kullanma ile ilgili sayfaya gidin.

Yeni varsayılan paketleme 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 bildirin. gradle.properties dosyanıza aşağıdakileri ekleyerek eski ambalajlama aracını kullanmaya geri dönebilirsiniz:

        android.useNewApkCreator=false
      

Yerel derleme ilişkilendirmesi

Artık Clang'ın projenizdeki her C/C++ dosyasını derleyip bağlamasının ne kadar süreceğini belirleyebilirsiniz. Gradle, projenizi derlemenin ne kadar sürdüğünü daha iyi anlayabilmeniz için bu derleyici etkinliklerinin zaman damgalarını içeren bir Chrome izleme çıkışı oluşturabilir. Bu derleme ilişkilendirme dosyasını oluşturmak için aşağıdakileri yapın:

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

    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 bölümüne gidin. Dosyanın adı profile-<var>timestamp</var>.json.gz.

Yerel derleme ilişkilendirme verilerini görüntüleyicinin üst kısmında görebilirsiniz:

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

Davranışta yapılan değişiklikler

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ı derlediğinizde eklenti artık extractNativeLibs değerini varsayılan olarak "false" olarak ayarlıyor. Yani yerel kitaplıklarınız sayfaya hizalanır ve sıkıştırılmadan paketlenir. Bu, yükleme boyutunun artmasına neden olsa da kullanıcılarınız aşağıdakilerden yararlanır:

  • Platform, yerel kitaplıkların kopyasını oluşturmadan doğrudan yüklü APK'dan yerel kitaplıklara erişebildiği için 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 olduğundan daha küçük indirme boyutu

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

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

Not: extractNativeLibs manifest özelliğinin yerini useLegacyPackaging DSL seçeneği aldı. Daha fazla bilgi için Sıkıştırılmış yerel kitaplıkları paketlemek için DSL'yi kullanma başlıklı 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 kod dosyalarınızı derlemede kullanılacak varsayılan bir sürüm seçer. Daha önce, eklenti NDK'nın en son indirilen sürümünü seçiyordu. Eklenti tarafından seçilen varsayılan değeri geçersiz kılmak için modülün build.gradle dosyasında android.ndkVersion mülkünü 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, daha hızlı derlemelere yol açsa da aşağıdakileri göz önünde bulundurmanız gerekir:

  • Derleyici, R sınıflarını yayın öncesi modül bağımlılıklarıyla paylaştığı için 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ırmayla belirlenir. Örneğin, A Kitaplığı, B Kitaplığı'nı "api" bağımlılık olarak içeriyorsa A Kitaplığı ve A Kitaplığı'na bağlı diğer kitaplıklar, B Kitaplığı'nın 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 makaleyi okuyun.

Varsayılan yapılandırmada bulunmayan kaynakları kaldırma

Kitaplık modülleri için varsayılan kaynak grubuna dahil etmediğiniz bir dile ait bir kaynak eklerseniz (örneğin, hello_world'yi /values-es/strings.xml'a dize kaynağı olarak eklerseniz ancak bu kaynağı /values/strings.xml'de tanımlamazsanız) Android Gradle eklentisi artık projenizi derlediğinde bu kaynağı dahil etmez. Bu davranış değişikliği, Resource Not Found çalışma zamanındaki istisnaların azalmasına ve derleme hızının artmasına neden olacaktır.

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

D8 artık uygulamanızı derlediğinde ek açıklamaların bir CLASS saklama politikası uyguladığı durumlara dikkat ediyor ve bu ek açıklamalar artık çalışma zamanında kullanılamıyor. Bu davranış, uygulamanın hedef SDK'sı API düzeyi 23 olarak ayarlandığında da ortaya çıkar. Daha önce, uygulamanızı Android Gradle eklentisinin ve D8'in eski sürümlerini kullanarak derlediğinizde çalışma zamanında bu ek açıklamalara erişilmesine izin verilirdi.

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 harf duyarlı değildir ve büyük harf karakterleri kullanan yollara saygı gösterir.
  • Veri bağlama özelliği artık varsayılan olarak artımlıdır. Daha fazla bilgi edinmek için 110061530 numaralı soruna bakın.

  • Roboelectric birim testleri dahil tüm birim testleri artık tamamen önbelleğe alınabilir. Daha fazla bilgi için 115873047 numaralı soruna bakın.

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ğlamayı kullanan kitaplık modüllerinde desteklenmektedir. Daha fazla bilgi için 126775542 numaralı soruna bakın.
  • Artık Gradle'ın paralel yürütme modu etkinken birden fazla modülde connectedAndroidTest görevleri çalıştırabilirsiniz.

Bilinen sorunlar

Bu bölümde, Android Gradle eklentisi 3.6.0'da bulunan bilinen sorunlar açıklanmaktadır.

Android Lint görevinin yavaş performansı

Ayrıştırma altyapısındaki bir gerileme nedeniyle bazı projelerde Android Lint'in tamamlanması çok daha uzun sürebilir. Bu durum, belirli kod yapılarındaki lambdalar için türlerin çıkarılması işleminin daha yavaş yapılmasına neden olur.

Sorun, IDEA'daki bir hata olarak bildirilmiştir ve Android Gradle eklentisi 4.0'ta düzeltilecektir.

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

Uygulamanız manifest dosyasında özel izinler tanıyorsa Android Gradle eklentisi genellikle özel izinlerinizi dize sabitleri olarak içeren bir Manifest.java sınıfı oluşturur. Bu sınıf, eklenti tarafından uygulamanızla birlikte paketlenir. Böylece, çalışma zamanında bu izinlere daha kolay referans verebilirsiniz.

Android Gradle eklentisi 3.6.0'da manifest sınıfı oluşturma işlemi bozuktur. Uygulamanızı bu eklentinin sürümüyle oluşturursanız ve uygulama manifest sınıfına referans verirse ClassNotFoundException istisnası görebilirsiniz. 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".

  • Aşağıda gösterildiği gibi kendi sabit değerlerinizi tanımlayın:

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