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. |
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 deposuna yerleştirilir.
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 paketleme aracını kullanmaya geri dönebilirsiniz:
android.useNewApkCreator=false
Yerel oluşturma 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 derlemek için gereken süreyi daha iyi anlayabilmeniz amacıyla 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:
-
Gradle derlemesi çalıştırırken
-Pandroid.enableProfileJson=true
işaretini ekleyin. Örnek:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Chrome tarayıcıyı açın ve arama çubuğuna
chrome://tracing
yazın. -
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:
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, 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şır. Bu nedenle, 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ük durumu, 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ı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 da belirli kod yapılarındaki lambdalar için türlerin tahmin edilmesinin daha yavaş hesaplanması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ımladıysa 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
istisna görebilirsiniz. Bu sorunu çözmek için aşağıdakilerden birini yapın:
-
Özel izinlerinize tam nitelikli adlarına göre 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"; } }