R8, uygulamadaki R8 optimizasyonlarını değiştiren veya tüm koruma kurallarını etkileyen genel seçenekler sunar. Bu seçenekler, saklama kurallarıyla birlikte proguard-rules.pro
dosyasında tutulur. Bu genel seçeneklerden bazıları ek optimizasyon yapılandırırken bazıları optimizasyonun belirli yönlerini devre dışı bırakır.
Ek optimizasyon için genel seçenekler
Aşağıdaki genel seçenekler ek optimizasyon sağlar:
-repackageclasses [<optional-package-name>]
: Sınıfları, uygulama boyutunu daha da küçültmek için tek bir belirtilen pakette yeniden paketler. İsteğe bağlı paket adını sağlamazsanız sınıflar boş olan varsayılan pakete taşınır. Bu, uygulamalar için önerilen bir ayardır.-allowaccessmodification
: R8'in daha kapsamlı optimizasyonlar gerçekleştirmek için sınıfların, alanların ve yöntemlerin görünürlüğünü değiştirmesine (genellikle genişletmesine) olanak tanır.proguard-android-optimize.txt
kullanıldığında etkinleştirilir. Android Gradle Plugin (AGP) 8.2'den itibaren, R8'i tam modda kullanıyorsanız bu yapılandırma varsayılan yapılandırmadır.
Aşağıda, ek optimizasyonun etkinleştirildiği bir yapılandırma örneği verilmiştir:
-repackageclasses
-allowaccessmodification
Optimizasyonu sınırlamaya yönelik genel seçenekler
Aşağıdaki genel seçenekler, uygulama optimizasyonunun belirli yönlerini devre dışı bırakmanıza olanak tanır ve saklama kurallarınızı hassaslaştırırken veya R8'i ilk kez etkinleştirirken faydalıdır.
-dontoptimize
: Kod optimizasyonunu (ör. yöntem satır içi yapma) engeller. Bu seçenek geliştirme sırasında kullanılabilir ancak üretim derlemelerinde kullanılmamalıdır.-dontshrink
: Referans verilmeyen kodun ve kod optimizasyonlarının kaldırılmasını önler. Bu seçenek geliştirme sırasında kullanılabilir ancak üretim derlemelerinde kullanılmamalıdır.-dontobfuscate
: Sınıf ve yöntem adlarının kısaltılmasını önler. Yığın izlemelerinin daha kolay okunabilmesi için hata ayıklama sırasında karartmayı devre dışı bırakmak özellikle yararlı olabilir. Bu seçenek geliştirme sırasında kullanılabilir ancak üretim derlemelerinde kullanılmamalıdır.-keepattributes <attributes>
: Korunması gereken özelliklerin virgülle ayrılmış listesini kabul eder. Varsayılanproguard-android-optimize.txt
'ı kullanmıyorsanız R8,RuntimeVisibleAnnotations
veSignature
dahil olmak üzere tüm özellikleri kaldırır. Ancak yansıtma gibi durumlarda bu özelliklere ihtiyaç duyulursa korunmaları faydalı olabilir. Belirtebileceğiniz özelliklerin listesi için Korunacak özellikler başlıklı makaleyi inceleyin.
Özellikleri koruma
Özellikler, kodunuzun farklı bölümlerine eklenen ek bilgi parçalarıdır. Özellikler, kodunuzdaki ek açıklamalar ve genel imzalar gibi bilgileri saklar.
Belirli yansıtıcı işlemlerin başarılı bir şekilde yürütülmesi için belirli özelliklerin korunması gerekir. Örneğin:
getEnclosingMethod()
veyagetDeclaredClasses()
kullanarak iç veya dış sınıf yapısına erişirkenEnclosingMethod
veInnerClasses
özellikleri gerekir.getTypeParameters()
kullanılarak genel imzalara erişilirkenSignature
özelliği gerekir.getAnnotation()
kullanılarak açıklamalara erişilirkenRuntimeVisibleAnnotations
özelliği gerekir.
Sık kullanılan zorunlu özellikler
Varsayılan Proguard dosyası (proguard-android-optimize.txt
veya
proguard-android.txt
) kullanılırken Android Gradle eklentisi (AGP) aşağıdaki özellikleri korur. Bu özelliklerden bazılarının AGP'nin daha yeni sürümlerini gerektirdiğini unutmayın:
Özellik | Açıklama |
---|---|
AnnotationDefault |
Bu özellik, açıklama türlerinde bulunur ve bir açıklama öğesinin varsayılan değerini depolar. Not: Bu özellik, AGP 7.1'den itibaren varsayılan olarak korunur ve yalnızca AGP'nin önceki sürümlerini kullanan uygulamalarda açıkça korunması gerekir. |
EnclosingMethod |
Bu özellik, yerel veya anonim olmayan sınıfların iç sınıflarında bulunur. Sınıfı doğrudan içeren yöntemi veya başlatıcıyı tanımlar. |
InnerClasses |
Bu özellik, başka bir sınıfta tanımlanan iç içe sınıflarla (iç sınıflar, statik iç içe sınıflar, yerel sınıflar ve anonim sınıflar) ilgili bilgileri kaydeder. |
LineNumberTable |
Bu özellik, bayt kodu talimatlarını orijinal kaynak dosyasındaki karşılık gelen satır numaralarıyla eşler. Not: Bu özellik, Android Gradle Eklentisi (AGP) 8.6'dan itibaren varsayılan olarak korunur ve yalnızca AGP'nin önceki sürümlerini kullanan uygulamalarda açıkça korunması gerekir. |
RuntimeVisibleAnnotations |
Bu özellik, yansıtma yoluyla çalışma zamanında görülebilen ek açıklamaları depolar. Genellikle, çalışma zamanında ek açıklamalar kullanılıyorsa bu, uygulamaların ve kitaplık tüketicisi kurallarında gereken *Annotation özelliklerinden tek ek açıklamadır. |
RuntimeVisibleParameterAnnotations |
Bu özellik, bir yöntemin parametreleri üzerinde yansıtma yoluyla çalışma zamanında görülebilen ek açıklamaları depolar. |
RuntimeVisibleTypeAnnotations |
Bu özellik, yalnızca bildirimler yerine tür kullanımları için geçerli olan ek açıklamaları depolar. Bu özellik, çalışma zamanında görünür. |
Signature |
Bu özellik, özellikle jenerik türler (ör. List<String> ) kullanıldığında sınıflar, yöntemler ve alanlar için daha genel bir tür imzası saklar. |
SourceFile |
Bu özellik, bir sınıfın derlendiği kaynak dosyanın (.kt veya .java dosyası) adını saklar. Bu özellik, derlenmiş Java kodunda adım adım ilerlerken orijinal kaynak kodu satırlarını göstermek için öncelikle hata ayıklayıcılar tarafından kullanılır. Geliştiricilerin yürütmeyi yazdıkları koda kadar izlemelerine yardımcı olur. Not: Bu özellik, AGP 8.2'den itibaren varsayılan olarak korunur ve yalnızca AGP'nin önceki sürümlerini kullanan uygulamalarda açıkça korunması gerekir. |
proguard-android-optimize.txt
kullanan uygulamalarda, AGP tarafından tanımlanan saklama kuralları çoğu senaryoda yeterlidir. Ancak bir kitaplık için kod yazıyorsanız bu listede tanımlanmış olsalar bile kitaplığınızın gerektirdiği tüm özellikleri tüketici saklama kurallarında belirtmeniz gerekir. Bu, geliştiriciler proguard-android-optimize.txt
'yı dahil etmemeye karar verirse kitaplığınızın sağlam olmasını sağlar.
Ek saklama özellikleri
Saklanacak ek özellikler belirtebilirsiniz ancak bu özellikler, yansıtıcı veya JNI erişimi senaryolarının büyük çoğunluğu için gerekli değildir. Ancak kitaplıklar optimize edilirken bu yöntemlerden bazıları hâlâ sıkça kullanılabilir.
Özellik | Açıklama |
---|---|
MethodParameters |
Bu özellik, bir yöntemin parametreleri (özellikle adları ve erişim işaretleri) hakkında bilgi sağlar. |
Exceptions |
Bu özellik, bir yöntemin oluşturduğu kontrol edilmiş istisnaları listeler. Bu özellik genellikle uygulamalar için kullanılmaz. Kitaplık yazarları için genellikle tüketici saklama kurallarında kullanılmaz ancak kitaplık oluştururken sıklıkla kullanılır. Kitaplıkları optimize etme hakkında ayrıntılı bilgi için Kitaplık yazarları için optimizasyon başlıklı makaleyi inceleyin. |
RuntimeInvisibleAnnotations |
Bu özellik, çalışma zamanında yansıtma ile görünmeyen ek açıklamaları bir sınıfta, alanda veya yöntemde depolar. Uygulama geliştiriciler bu özelliği saklamamalıdır. Kitaplık yazarları için bu özellik, tüketici saklama kurallarında geçerli değildir ancak kitaplık oluştururken sıklıkla kullanılır. Kitaplıkları optimize etme hakkında ayrıntılı bilgi için Kitaplık yazarları için optimizasyon başlıklı makaleyi inceleyin. |
RuntimeInvisibleParameterAnnotations |
Bu özellik, bir yöntemin parametrelerinde çalışma zamanında yansıtmayla görünür olmayan ek açıklamaları depolar. Uygulama geliştiriciler bu özelliği saklamamalıdır. Kitaplık yazarları için bu özellik, tüketici saklama kurallarında geçerli değildir ancak kitaplık oluştururken sıklıkla kullanılır. Kitaplıkları optimize etme hakkında ayrıntılı bilgi için Kitaplık yazarları için optimizasyon başlıklı makaleyi inceleyin. |
RuntimeInvisibleTypeAnnotations |
Bu özellik, yalnızca bildirimler yerine tür kullanımları için geçerli olan ek açıklamaları depolar. Bu özellik çalışma zamanında görünmez. Uygulama geliştiriciler bu özelliği saklamamalıdır. Kitaplık yazarları için bu özellik, tüketici saklama kurallarında geçerli değildir ancak kitaplık oluştururken sıklıkla kullanılır. Kitaplıkları optimize etme hakkında ayrıntılı bilgi için Kitaplık yazarları için optimizasyon başlıklı makaleyi inceleyin. |