Android Gradle Eklentisi 3.6.0 (Şubat 2020)
Android eklentisinin bu sürümü için aşağıdakiler gerekir:
| 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 bölümünü inceleyin. |
| SDK Derleme Araçları | 28.0.3 | 28.0.3 | SDK Derleme Araçları'nı yükleyin veya yapılandırın. |
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ü aşağıdaki yeni özellikleri içerir.
Görünüm Bağlama
Görünüm bağlama, kodunuzdaki görünümlere referans verirken derleme zamanı güvenliği sağlar. Artık findViewById() yerine otomatik olarak üretilmiş 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 Görünüm Bağlama belgelerini okuyun.
Maven Publish eklentisi için destek
Android Gradle eklentisi, derleme yapılarını bir Apache Maven deposunda yayınlamanıza olanak tanıyan Maven Publish Gradle eklentisi için destek içerir. Android Gradle eklentisi, uygulamanızdaki veya kitaplık modülünüzdeki her derleme değişkeni yapısı için bir bileşen oluşturur. Bu bileşeni, bir Maven deposunda yayını özelleştirmek için kullanabilirsiniz.
Daha fazla bilgi için Maven Publish eklentisini kullanma ile ilgili sayfayı inceleyin.
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ını artıracaktır. Yeni paketleme aracı beklediğiniz gibi çalışmıyorsa lütfen hata bildirin. 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'in projenizdeki her bir C/C++ dosyasını derlemesinin ve bağlamasının ne kadar sürdüğünü belirleyebilirsiniz. Gradle, bu derleyici etkinlikleri için zaman damgaları içeren bir Chrome izi oluşturabilir. Böylece projenizi derlemek için gereken süreyi daha iyi anlayabilirsiniz. Bu derleme ilişkilendirme dosyasını oluşturmak için aşağıdakileri yapın:
-
Gradle derlemesi çalıştırırken
-Pandroid.enableProfileJson=trueişaretini ekleyin. Örneğin:gradlew assembleDebug -Pandroid.enableProfileJson=true -
Chrome Tarayıcı'yı açın ve arama çubuğuna
chrome://tracingyazın. -
Load (Yükle) düğmesini tıklayın ve dosyayı bulmak için
<var>project-root</var>/build/android-profiledizinine gidin. Dosyanın adıprofile-<var>timestamp</var>.json.gz.
Doğal derleme ilişkilendirme verilerini görüntüleyicinin üst kısmında görebilirsiniz:

Davranış değişiklikleri
Eklentinin bu sürümünü kullanırken davranışta aşağıdaki değişikliklerle karşılaşabilirsiniz.
Yerel kitaplıklar varsayılan olarak sıkıştırılmadan paketlenir
Uygulamanızı oluşturduğunuzda eklenti artık varsayılan olarak extractNativeLibs değerini "false" olarak ayarlar. Yani yerel kitaplıklarınız sayfaya göre hizalanmış ve sıkıştırılmadan paketlenmiş olmalıdır. Bu durum, yükleme boyutunun artmasına neden olsa da kullanıcılarınız aşağıdaki avantajlardan yararlanır:
- Platform, kitaplıkların bir kopyasını oluşturmadan yerel kitaplıklara doğrudan yüklü APK'dan erişebildiği 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 Google Play Store sıkıştırması genellikle daha iyi olduğu için indirme boyutu daha küçük olur.
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ğ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 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ı derlemek için kullanılacak varsayılan bir sürüm seçer.
Eklenti daha önce NDK'nin indirilen en son 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ı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şturup 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ı tamamlanmasını sağlar 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ığı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 eklemek 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ğ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ığı
implementationbağımlılık yapılandırmasını kullanıyorsa Daha fazla bilgi edinmek için bağımlılık yapılandırmaları ile ilgili kaynakları 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 dizininde dize kaynağı olarak hello_world ekler ancak bu kaynağı /values/strings.xml dizininde tanımlamazsanız) Android Gradle eklentisi, projenizi derlerken artık bu kaynağı dahil etmez. Bu davranış değişikliği,
çalışma zamanı istisnalarının (Resource Not Found) azalmasını
ve derleme hızının artmasını sağlayacaktır.
D8 artık ek açıklamalar için CLASS saklama politikasına uyar.
D8, uygulamanızı derlerken ek açıklamaların CLASS saklama politikası uyguladığı durumlara uyar ve bu ek açıklamalar artık çalışma zamanında kullanılamaz. Bu davranış, uygulamanın hedef SDK'sı API düzeyi 23 olarak ayarlandığında da görülür. Bu ayar, daha önce uygulamanızı Android Gradle eklentisinin ve D8'in eski sürümlerini kullanarak derlerken çalışma zamanında bu ek açıklamalara erişime izin veriyordu.
Diğer davranış değişiklikleri
-
aaptOptions.noCompressartı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 karakterleri kullanan yollara uyar. -
Veri bağlama artık varsayılan olarak artımlıdır. Daha fazla bilgi 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 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 için 126775542 numaralı soruna bakın.
- Artık Gradle'ın paralel yürütme modu etkinken birden fazla modülde
connectedAndroidTestgörevleri çalıştırabilirsiniz.
Bilinen sorunlar
Bu bölümde, Android Gradle eklentisi 3.6.0'da mevcut olan bilinen sorunlar açıklanmaktadır.
Android Lint görevinin yavaş performansı
Android Lint'in ayrıştırma altyapısındaki bir gerileme nedeniyle, bazı projelerde tamamlanması çok daha uzun sürebilir. Bu durum, belirli kod yapılarındaki lambda'lar için tahmin edilen türlerin daha yavaş hesaplanmasına neden olur.
Sorun, IDEA'da bir hata olarak bildirilmiştir ve Android Gradle eklentisi 4.0'da düzeltilecektir.
Eksik Manifest sınıfı {:#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 paketler. 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 bozuk.
Uygulamanızı eklentinin bu sürümüyle oluşturursanız ve manifest sınıfına referans veriyorsa ClassNotFoundException istisnası görebilirsiniz. Bu sorunu çözmek için aşağıdakilerden birini yapın:
-
Özel izinlerinize tam adlarıyla referans verin. Örneğin,
"com.example.myapp.permission.DEADLY_ACTIVITY". -
Aşağıda gösterildiği gibi kendi sabitlerinizi tanımlayın:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }