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 başlıklı makaleyi 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ünde aşağıdaki yeni özellikler yer almaktadır.
Bağlama görüntüleme
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 inceleyin.
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 desteği içerir. Android Gradle eklentisi, uygulamanızdaki veya kitaplık modülünüzdeki her derleme varyantı yapıtı için bir bileşen oluşturur. Bu bileşeni, bir yayını Maven deposunda özelleştirmek için kullanabilirsiniz.
Daha fazla bilgi için Maven Publish eklentisini kullanma başlıklı sayfayı inceleyin.
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. 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 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:
-
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. -
Yükle düğmesini tıklayın ve dosyayı bulmak için
<var>project-root</var>/build/android-profilebö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:

Davranış değişiklikleri
Eklentinin bu 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 paketlenir. Bu durum, yükleme boyutunun daha büyük olmasına 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 için kitaplıkların kopyasını oluşturmadan daha küçük bir uygulama yükleme boyutu elde edilir.
- 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 DSL'yi kullanarak sıkıştırılmış yerel kitaplıkları paketleme 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, 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ı derlemelerle sonuçlanmalıdır 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ığı 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ığın bağımlılık olarak dahil edilmesi 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ığı
implementationbağı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 bu kaynağı artık 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 ek açıklamalar için CLASS saklama politikasına uyuyor
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 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 harfli 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
connectedAndroidTestgörevlerini birden fazla modülde ç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ş çalışması
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 bildirildi ve Android Gradle eklentisi 4.0'da düzeltilecek.
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, 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 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 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"; } }