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. |
Bu küçük güncelleme, yeni varsayılan ayarlarla uyumluluğu destekler ve şunun özellikleri: paket görünürlüğü kullanıma sunuyoruz.
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 öğ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:
-
Şu durumlarda
-Pandroid.enableProfileJson=true
işaretini ekleyin: bir derleme çalıştıracağım. Örnek:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
Chrome tarayıcıyı açın ve
chrome://tracing
yazın tıklayın. -
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:
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"; } }