En iyi kullanıcı deneyimi için uygulamanızı mümkün olduğunca küçük ve hızlı olacak şekilde optimize etmeniz gerekir. R8 adlı uygulama optimizasyon aracımız, kullanılmayan kodları ve kaynakları kaldırarak, kodu yeniden yazarak çalışma zamanı performansını optimize ederek ve daha birçok işlem yaparak uygulamanızı kolaylaştırır. Bu durum, kullanıcılarınız için şu anlama gelir:
- Daha kısa başlatma süresi
- İyileştirilmiş oluşturma ve çalışma zamanı performansı
- Daha az ANR
Uygulama optimizasyonunu etkinleştirmek için yayın derlemenizin uygulama düzeyindeki derleme komut dosyasında isMinifyEnabled = true (kod optimizasyonu için) ve isShrinkResources = true (kaynak optimizasyonu için) öğelerini aşağıdaki kodda gösterildiği gibi ayarlayın. Her iki ayarı da her zaman etkinleştirmenizi öneririz. Ayrıca, optimizasyonlar projenizin derleme süresini artırdığı ve kodu değiştirme şekli nedeniyle hata ayıklamayı zorlaştırabileceği için uygulama optimizasyonunu yalnızca yayınlamadan önce test ettiğiniz uygulamanızın son sürümünde (genellikle yayın derlemeniz) etkinleştirmenizi öneririz.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Daha da küçük uygulamalar için kullanılmayan kaynakları kaldırmayı optimize etme
Android Gradle eklentisinin (AGP) 8.12.0 sürümünde, daha da küçük ve hızlı uygulamalar oluşturmak için kaynak ve kod optimizasyonunu entegre etmeyi amaçlayan optimize edilmiş kaynak küçültme özelliği kullanıma sunuluyor.
Optimize edilmiş kullanılmayan kaynakları kaldırmayı etkinleştirme
AGP'nin 9.0.0'dan önceki bir sürümünde yeni optimize edilmiş kaynak küçültme işlem hattını etkinleştirmek için projenizin gradle.properties dosyasına aşağıdakileri ekleyin:
android.r8.optimizedResourceShrinking=true
AGP 9.0.0 veya daha yeni bir sürümü kullanıyorsanız android.r8.optimizedResourceShrinking=true'ı ayarlamanız gerekmez. Optimize edilmiş kullanılmayan kaynakları kaldırma, derleme yapılandırmanızda isShrinkResources = true etkinleştirildiğinde otomatik olarak uygulanır.
R8 optimizasyon ayarlarını doğrulama ve yapılandırma
R8'in tam optimizasyon özelliklerini kullanmasını sağlamak için projenizin gradle.properties dosyasında varsa aşağıdaki satırı kaldırın:
android.enableR8.fullMode=false # Remove this line from your codebase.
Uygulama optimizasyonunun etkinleştirilmesi, özellikle R8 sınıf veya yöntem adlarını yeniden adlandırırsa yığın izlerinin anlaşılmasını zorlaştırır. Kaynak kodunuzla doğru şekilde eşleşen yığın izlemeleri almak için Orijinal yığın izlemeyi kurtarma başlıklı makaleyi inceleyin.
R8 etkinse daha iyi başlatma performansı için başlatma profilleri de oluşturmalısınız.
Uygulama optimizasyonunu etkinleştirirseniz ve bu durum hatalara neden olursa hataları düzeltmek için uygulayabileceğiniz bazı stratejiler şunlardır:
- Bazı kodların değiştirilmemesi için koruma kuralları ekleyin.
- Optimizasyonları kademeli olarak uygulama
- Kodunuzu optimizasyona daha uygun kitaplıkları kullanacak şekilde güncelleyin.
Derleme hızınızı optimize etmek istiyorsanız ortamınıza göre R8'i nasıl yapılandıracağınız hakkında bilgi edinmek için R8'in nasıl çalıştığını yapılandırma başlıklı makaleye bakın.
AGP ve R8 sürüm davranışındaki değişiklikler
Aşağıdaki tabloda, Android Gradle eklentisinin (AGP) ve R8 derleyicisinin çeşitli sürümlerinde kullanıma sunulan temel özellikler özetlenmektedir.
| AGP sürümü | Tanıtılan özellikler |
|---|---|
| 9.0 |
Optimize edilmiş kullanılmayan kaynakları kaldırma: Varsayılan olarak etkindir (android.r8.optimizedResourceShrinking kullanılarak kontrol edilir). Optimize edilmiş kullanılmayan kaynakları kaldırma, kullanılmayan kaynakları kaldırma işleminin kod optimizasyonu işlem hattına entegre edilmesine yardımcı olarak daha küçük ve daha hızlı uygulamalar oluşturulmasını sağlar. Hem kod hem de kaynak referanslarını aynı anda optimize ederek yalnızca kullanılmayan koddan referans verilen kaynakları tanımlar ve kaldırır. Bu, önceki ayrı optimizasyon süreçlerine kıyasla önemli bir gelişmedir.Bu özellik, özellikle farklı form faktörü dikey alanlarında önemli kaynakları ve kodu paylaşan uygulamalar için yararlıdır. Bu uygulamalarda, uygulama boyutunda% 50'den fazla iyileşme ölçülmüştür. Boyutun küçülmesi, daha küçük indirmelere, daha hızlı yüklemelere ve daha hızlı başlatma, daha iyi oluşturma ve daha az ANR ile daha iyi bir kullanıcı deneyimine yol açar. Kitaplık kuralı filtreleme: Kitaplık tüketici kurallarında genel seçenekler (ör. -dontobfuscate) için destek kaldırıldı ve uygulamalar bu seçenekleri filtreleyecek. Daha fazla bilgi için Genel seçenekler ekleme başlıklı makaleyi inceleyin.Kotlin null denetimleri: Varsayılan olarak optimize edildi ( -processkotlinnullchecks kullanılarak kontrol edilir). Bu sürümde derleme hızında da önemli iyileştirmeler yapıldı. Daha fazla bilgi için Ek optimizasyon için genel seçenekler başlıklı makaleyi inceleyin.Belirli paketleri optimize etme: Belirli paketleri optimize etmek için packageScope simgesini kullanabilirsiniz. Bu özellik deneysel olarak desteklenmektedir. Daha fazla bilgi için Belirtilen paketleri packageScope ile optimize etme başlıklı makaleyi inceleyin.Varsayılan olarak optimize edildi: Kaçınılması gereken -dontoptimize içerdiğinden getDefaultProguardFile("proguard-android.txt") desteği sonlandırıldı. Bunun yerine "proguard-android-optimize.txt" kullanın. Uygulamanızda optimizasyonu genel olarak devre dışı bırakmanız gerekiyorsa işareti bir ProGuard dosyasına manuel olarak ekleyin.
|
| 8.12 |
Kaynak küçültme: İlk destek eklendi (Varsayılan olarak devre dışıdır. isShrinkResources kullanmayı etkinleştirin. Kaynak küçültme, kullanılmayan kaynakları etkili bir şekilde tanımlayıp kaldırmak için R8 ile birlikte çalışır.Logcat retracing: Android Studio Logcat penceresinde otomatik retracing desteği. |
| 8.6 |
Geliştirilmiş yeniden izleme: Tüm minSdk seviyeleri için varsayılan olarak dosya adı ve satır numarası yeniden izlemeyi içerir (önceden 8.2 sürümünde minSdk 26+ gerekiyordu).R8'in güncellenmesi, karartılmış derlemelerdeki yığın izlerinin kolayca ve net bir şekilde okunabilmesini sağlar. Bu sürüm, satır numaralarının ve kaynak dosyaların nasıl eşlendiğini iyileştirerek Android Studio Logcat gibi araçların kilitlenmeleri otomatik olarak orijinal kaynak koduna geri götürmesini kolaylaştırır. |
| 8.0 |
Varsayılan olarak tam mod: R8 tam modu, önemli ölçüde daha güçlü optimizasyon sağlar. Bu özellik varsayılan olarak etkindir. android.enableR8.fullMode=false aracını kullanarak devre dışı bırakabilirsiniz.
|
| 7,0 |
Tam mod kullanıma sunuldu: android.enableR8.fullMode=true kullanılarak etkinleştirilebilen bir özellik olarak kullanıma sunuldu. Tam mod, kodunuzun yansıtmayı ve diğer dinamik özellikleri nasıl kullandığı konusunda daha katı varsayımlar yaparak daha güçlü optimizasyonlar uygular. Bu özellik, uygulama boyutunu küçültüp performansı artırsa da gerekli kodların kaldırılmasını önlemek için ek koruma kuralları gerektirebilir.
|