Android Gradle eklentisi 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 edinmek için Gradle'ı güncelleme başlıklı makaleyi inceleyin.
SDK Build Tools 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'deki paket görünürlüğü için 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ünde aşağıdaki yeni özellikler yer almaktadır.

Görünüm bağlama

Görünüm bağlama, kodunuzdaki görünümlere referans verirken derleme zamanında güvenlik sağlar. Artık findViewById() yerine otomatik olarak oluşturulan bağlama sınıfı referansını kullanabilirsiniz. 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 View Binding belgelerini okuyun.

Maven Publish eklentisi desteği

Android Gradle eklentisi, derleme yapılarını bir Apache Maven deposuna yayınlamanıza olanak tanıyan Maven Publish Gradle eklentisi desteği içerir. Android Gradle eklentisi, uygulamanızdaki veya kitaplık modülünüzdeki her derleme varyantı yapısı için bir bileşen oluşturur. Bu bileşeni, Maven deposunda yayın özelleştirmek için kullanabilirsiniz.

Daha fazla bilgi edinmek için Maven Publish eklentisini kullanma hakkındaki sayfaya gidin.

Yeni varsayılan paketleme aracı

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

        android.useNewApkCreator=false
      

Yerel derleme ilişkilendirmesi

Artık Clang'in projenizdeki her C/C++ dosyasını oluşturup bağlamasının ne kadar sürdüğünü belirleyebilirsiniz. Gradle, projenizi oluşturmak için gereken süreyi daha iyi anlayabilmeniz amacıyla bu derleyici etkinliklerinin zaman damgalarını içeren bir Chrome izi oluşturabilir. Bu derleme atıf dosyasını oluşturmak 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 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 izi

Davranış değişiklikleri

Bu eklenti sürümünü kullanırken aşağıdaki davranış değişiklikleriyle karşılaşabilirsiniz.

Yerel kitaplıklar varsayılan olarak sıkıştırılmamış şekilde paketlenir.

Uygulamanızı oluşturduğunuzda eklenti artık varsayılan olarak extractNativeLibs değerini "false" olarak ayarlar. Yani yerel kitaplıklarınız sayfa hizalı ve sıkıştırılmamış olarak paketlenmiş. Bu durum, yükleme boyutunun büyümesine neden olsa da kullanıcılarınız aşağıdaki avantajlardan yararlanır:

  • Platform, yerel kitaplıklara doğrudan yüklenen APK'dan erişebildiği ve kitaplıkların kopyasını oluşturmadığı için uygulama yükleme boyutu daha küçüktür.
  • 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 indirme boyutu küçülür.

Android Gradle eklentisinin bunun yerine 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 Use the DSL to package compressed native libraries (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 kodu dosyalarınızı derlerken 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 android.ndkVersion dosyasında android.ndkVersion özelliğini kullanın.build.gradle

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

Android Gradle eklentisi, derleme sınıf yolunu basitleştirmek için projenizdeki her kitaplık modülü için yalnızca bir R sınıfı oluşturur ve bu R sınıflarını diğer modül bağımlılıklarıyla paylaşır. Bu optimizasyon daha hızlı derlemelerle sonuçlanmalıdır ancak aşağıdaki noktaları göz önünde bulundurmanız gerekir:

  • Derleyici, R sınıflarını yukarı akış 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ı için görünürlüğü, kitaplığı bağımlılık olarak dahil etmek için kullanılan yapılandırmaya göre belirlenir. Örneğin, A kitaplığı B kitaplığını "api" bağımlılığı olarak içeriyorsa A kitaplığı ve A kitaplığına bağımlı 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ında bilgi edinin.

Varsayılan yapılandırmada eksik olan kaynakları kaldırma

Kitaplık modüllerinde, varsayılan kaynak kümesine dahil etmediğiniz bir dil için kaynak eklerseniz (ör. /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ğı dahil etmez. Bu davranış değişikliği, daha az Resource Not Found çalışma zamanı istisnası ve daha hızlı derleme ile sonuçlanmalıdır.

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

D8, uygulamanızı derlerken artık ek açıklamaların CLASS saklama politikasını uygulamasını dikkate alıyor 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 görülür. Bu API düzeyi, Android Gradle eklentisinin ve D8'in eski sürümleri kullanılarak uygulamanız derlenirken çalışma zamanında bu ek açıklamalara erişime daha önce izin veriyordu.

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 harf karakterlerin kullanıldığı yollara saygı gösterir.
  • Veri bağlama artık varsayılan olarak artımlı. Daha fazla bilgi edinmek için 110061530 numaralı soruna bakın.

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

Bilinen sorunlar

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

Android Lint görevinin yavaş performansı

Android Lint, ayrıştırma altyapısındaki gerileme nedeniyle bazı projelerde çok daha uzun sürebilir. Bu durum, belirli kod yapılandırmalarındaki lambda'lar için çıkarılan türlerin daha yavaş hesaplanmasına neden olur.

Bu sorun, IDEA'daki bir hata olarak bildirilir ve Android Gradle eklentisi 4.0'da düzeltilir.

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

Uygulamanız manifestinde ö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, bu izinlere çalışma zamanında daha kolay şekilde başvurabilirsiniz.

Manifest sınıfı oluşturma işlemi, Android Gradle eklentisi 3.6.0'da bozuldu. Uygulamanızı bu eklenti sürümüyle oluşturursanız ve uygulama, manifest sınıfına referans verirse 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ğıdaki 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";
                  }
                }