Android Gradle Plugin 3.6.0 (Şubat 2020)

Android eklentisinin bu sürümü aşağıdakileri gerektirir:

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 sayfasına göz atın.
SDK Derleme Araçları 28.0.3 28.0.3 SDK Derleme Araçları'nı yükleyin veya yapılandırın.

Yeni özellikler

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

Görünüm Bağlama

Görüntüleme bağlaması, aşağıdaki görünümlere referans verirken derleme zamanı güvenliği sağlar: kodunuz. Artık findViewById() yerine şununla değiştirebilirsiniz: otomatik oluşturulan bağlama sınıfı referansı. 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 için View Bağlama belgeleri.

Maven Publish eklentisi desteği

Android Gradle eklentisinde Maven Derleme yapılarını şuraya yayınlamanıza olanak tanıyan Gradle eklentisini yayınlayın deposudur. Android Gradle eklentisi aşağıdaki kodu oluşturur: bileşeni uygulama veya kitaplık modülünüzdeki her derleme varyantı yapısı için bir yayın veri tabanına gönderebilirsiniz.

Daha fazla bilgi edinmek için kullandığınız yeni araçlar eklentisi.

Yeni varsayılan paketleme aracı

Uygulamanızın hata ayıklama sürümünü oluştururken eklenti, uygulamanızın hata ayıklama sürümünü oluştururken yeni bir zipflinger adlı paketleme aracını kullanmanızı öneririz. Bu yeni aracının derleme hızı iyileştirmeleri sağlaması gerekir. Yeni sunum aracı beklediğiniz gibi çalışmıyorsa lütfen hata bildiriminde bulunun. Şuna geri dönebilirsiniz: eski paketleme aracını kullanın: gradle.properties dosyası:

        android.useNewApkCreator=false
      

Yerel derleme ilişkilendirmesi

Artık Clang'in derleme ve tamamlama için gereken süreyi her C/C++ dosyasını bağlamanız gerekir. Gradle, Chrome izlerinin çıkışını verebilir bu derleyici etkinliklerine ait zaman damgalarını içeren daha iyi anlayacaksınız. Bu derlemenin çıktısını almak için ilişkilendirme dosyanızda, aşağıdakileri yapın:

  1. Şu durumlarda -Pandroid.enableProfileJson=true işaretini ekleyin: bir derleme çalıştıracağım. Örnek:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Chrome tarayıcıyı açın ve chrome://tracing yazın tıklayın.

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

Yerel derleme ilişkilendirme verilerini görüntüleyen:

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

Davranış değişiklikleri

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

tarafından sıkıştırılmamış yerel kitaplıklar varsayılan

Uygulamanızı derlediğinizde, uygulama extractNativeLibs - "false" tarihleri arasında varsayılandır. Yani yerel kitaplıklarınız sayfaya hizalanır ve paketlenir sahip olmayabilir. Bunun sonucunda yükleme boyutu daha büyük olsa da kullanıcılarınız şu avantajlardan yararlanabilirsiniz:

  • Platform, yerel reklamlara erişebildiği için daha küçük uygulama yükleme boyutu kitaplıklarının bir kopyasını oluşturmadan, doğrudan yüklenen APK'dan yardımcı oluyorum.
  • Play Store sıkıştırması genelde APK'nıza sıkıştırılmamış yerel kitaplıklar eklediğinizde veya Android App Bundle.

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

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

Not: extractNativeLibs manifesti özelliğinin yerini useLegacyPackaging DSL aldı seçeneğini belirleyin. Daha fazla bilgi için sürüm notuna bakın Sıkıştırılmış paket için DSL'yi kullanın yerel kitaplıklar başlıklı bölüme bakın.

Varsayılan NDK sürümü

NDK'nın birden fazla sürümünü indirirseniz Android Gradle eklentisi şimdi kaynak kodu dosyalarınızı derlerken kullanılacak varsayılan bir sürüm seçiyor. Önceden, eklenti NDK'nın en son indirilen sürümünü seçiyordu. Modülünandroid.ndkVersion build.gradle dosyası, eklentinin seçtiği varsayılanı geçersiz kılar.

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

Android Gradle eklentisi, derleme sınıf yolunu aşağıdakileri yaparak basitleştirir: projenizdeki her kitaplık modülü için yalnızca bir R sınıfı oluşturarak ve bu R sınıflarını başka modül bağımlılıklarıyla paylaşabilirsiniz. Bu optimizasyon sonuç daha hızlı derlemeler sağlar, ancak yine de şunları göz önünde bulundurun:

  • Derleyici, yukarı akış modülüyle R sınıflarını paylaştığı için projenizdeki her modülde, bağımlılıklara ilişkin bir kontrol sistemi benzersiz paket adı.
  • Bir kitaplığın R sınıfının diğer proje bağımlılıklarına görünürlüğü kitaplığı bir öğe olarak eklemek için kullanılan yapılandırmaya desteklenmektedir. Örneğin, A Kitaplığı, B Kitaplığı'nı "api" bağımlılığı, 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ıklarda B Kitaplığı'nın R sınıfına erişebilir. A Kütüphanesi implementation bağımlılık yapılandırması. Öğrenmek için hakkında daha fazla bilgi bağımlılık yapılandırma başlıklı makaleyi inceleyin.

Eksik kaynakları varsayılandan kaldır yapılandırma

Kitaplık modüllerinde, izlemek istediğiniz bir dil için kaynak eklerseniz varsayılan kaynak grubuna dahil etmeyin. Örneğin, hello_world kaynağında dize kaynağı olarak /values-es/strings.xml ama bu kaynağı /values/strings.xml: Android Gradle eklentisi artık kullanılamıyor projenizi derlerken bu kaynağı da içerir. Bu davranış değişikliği daha az Resource Not Found çalışma zamanı istisnasıyla sonuçlanacaktır ve iyileştirilmiş derleme hızı.

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

D8, uygulamanızı derlerken artık ek açıklamaların bir CLASS uygulanmasını dikkate alıyor ve bu ek açıklamalara artık şu adresten ulaşılamamaktadır: belirler. Bu davranış, uygulamanın hedef SDK'sı Daha önce bu ek açıklamalara erişim izni veren API düzeyi 23 çalışma zamanına göre test etmek amacıyla, eklentisi ve D8.

Diğer davranış değişiklikleri

  • aaptOptions.noCompress artık hiçbir cihazda büyük/küçük harfe duyarlı değil platformlara (hem APK hem de paketler için) izin verir ve büyük harfle başlayın.
  • Veri bağlama artık varsayılan olarak artımlıdır. Daha fazla bilgi edinmek için bkz. sorun #110061530.

  • RoboElektrik birim testleri dahil tüm birim testleri artık tamamen önbelleğe alınabilir. Daha fazla bilgi edinmek için bkz. sorun #115873047.

Hata düzeltmeleri

Android Gradle eklentisinin bu sürümü aşağıdaki hatayı içeriyor şu düzeltmeler:

  • Robolectric birim testleri, artık Şunu kullanan kitaplık modüllerinde desteklenmektedir: veri bağlamayı kullanabilirsiniz. Daha fazla bilgi edinmek için bkz. sorun #126775542.
  • Artık şu uygulamalarda connectedAndroidTest görev çalıştırabilirsiniz: Gradle'ın çalışmaları paralel yürütme modu etkinleştirildi.

Bilinen sorunlar

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

Android Lint görevinin yavaş performansı

Android Lint'in bazı projelerde tamamlanması, ayrıştırma altyapısında regresyona yol açar ve hesaplamayı yavaşlatır. lambdalar için türetilmiş türlerden oluşur.

Sorunun bildirildiği yer: IDEA'daki bir hata ve Android Gradle Plugin 4.0'da düzeltilecek.

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

Uygulamanız manifest dosyasında özel izinler tanımlıyorsa Android Gradle eklentisi genellikleManifest.java özel izinlerinizi dize sabitleri olarak içerir. Eklenti paketleri Böylece, bu sınıfa kolayca başvurabilmeniz için izinleri sunmanızı sağlar.

Android Gradle eklentisi 3.6.0'da manifest sınıfının oluşturulması hatalı. Uygulamanızı eklentinin bu sürümüyle derlerseniz ve bu sürüm, manifest sınıfında bir ClassNotFoundException kabul edersiniz. Bu sorunu çözmek için aşağıdakilerden birini yapın:

  • Özel izinlerinizi tam nitelikli adlarıyla belirtin. Ö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";
                  }
                }