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. |
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:
-
Gradle derlemesi çalıştırırken
-Pandroid.enableProfileJson=true
işaretini ekleyin. Örneğin: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ış 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"; } }