DEX kodu optimizasyonu

DEX kodu optimizasyonu, uygulamanızın derleme kalitesini, boyutunu ve performansını izlemenize ve iyileştirmenize yardımcı olan bir Android vitals bulgusudur. Kodunuzu R8 veya alternatif araçlar (ör. ProGuard ile uyumlu optimize ediciler ya da ikincil DEX işlem sonrası araçları) kullanarak optimize edip karartmak, uygulamanızın DEX boyutunu küçültür, çalışma zamanı performansını artırır ve bellek ayak izini en aza indirir.

DEX veya Dalvik Executable dosyaları, uygulamanızı çalıştırmak için kullanılan derlenmiş kodu içerir. Bu genellikle derlenmiş C++ kodu veya .so dosyalarının aksine Java ve Kotlin kodunu içerir.

Android vitals, tüm uygulama ve oyunlar için DEX kodu optimizasyonu metriklerini raporlar ancak yalnızca belirli boyut şartlarını karşılayan uygulama ve oyunlar için eşikleri zorunlu kılar.

Sorunu tespit etme

Android vitals, uygulamanızın DEX kodu optimizasyon seviyeleri düşük olduğunda sizi uyarabilir. Buna, R8 kullanan uygulamalar ve oyunlar için kod karartma, küçültme ve optimizasyon dahildir. R8 kullanmayan uygulamalarda Android vitals, optimizasyon, küçültme ve karartma oranlarını kontrol etmeye çalışır ancak gerektiğinde karartma sezgisel yöntemlerine geri döner.

Optimizasyon durumunu izleme

Android vitals, uygulamanızın kod optimizasyonu için tanımlanan minimum yüzdeliklere uymadığında Play Console üzerinden sizi uyararak uygulamanızın performansını artırmanıza yardımcı olabilir. Küçültme, optimizasyon ve karartma ile ilgili ayrıntılı tanımlar için R8 Yapılandırma Analiz Aracı'nı kullanma başlıklı makaleyi inceleyin.

AGP 8.10 veya sonraki sürümlerin en son yamasıyla oluşturulan uygulamalarda bu yüzdeler, dahil edilen r8.json dosyasından alınır.

AGP'nin daha eski sürümlerinde veya r8.json dosyası dahil edilmediğinde, yüzdeler dahil edilmişse mapping.txt dosyasından, eşleme dosyası mevcut değilse DEX sezgisel yöntemleri kullanılarak hesaplanır.

Alternatif bir kod optimize ediciyle optimize edilmiş uygulamalar için Android vitals, uygulama paketinde karartılmış olan sınıfların, yöntemlerin ve alanların yüzdesini tahmin etmek üzere bir analiz gerçekleştirir.

Toplam DEX boyutu minimumları

Android vitals, tüm uygulamalar için kod optimizasyonu metriklerini hesaplasa da yalnızca uygulama paketiniz aşağıdaki toplam DEX boyutu şartlarını karşılıyorsa uyarı alırsınız:

  • Uygulamalar: Pakette, sıkıştırılmamış boyut olarak ölçülen en az 10 MB DEX kodu bulunuyor.
  • Oyunlar: Paket, sıkıştırılmamış boyut olarak ölçülen en az 50 MB DEX kodu içeriyor

Android vitals, uygulamanızın DEX boyutunu gösterir ancak bu boyutu komut satırını kullanarak yerel olarak da ölçebilirsiniz:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

R8 kod optimizasyonunu yerel olarak ölçme

Uygulamanız R8 ile optimize ediliyorsa R8 Yapılandırma Analiz Aracı'nı kullanarak uygulama paketinizin optimizasyonunu, karartmasını ve küçültülmesini ölçebilirsiniz. R8 Yapılandırma Analiz Aracı raporu, R8 Analiz Aracı Becerisi'ne de dahildir. Rapor, saklama kurallarınızın optimizasyon, küçültme ve karartma puanlarınızı nasıl etkilediğini anlamanıza yardımcı olsa da rapordaki yüzdeler, optimizasyonlardan önce hesaplandığı için Android vitals'daki değerlerle eşleşmez.

Android vitals'ın puanlarınızı hesaplamak için kullandığı meta verileri incelemek üzere uygulama paketinizden r8.json dosyasını çıkarın:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Sorunu düzeltme

Düşük DEX kod optimizasyonu puanlarını ele almak için derleme sisteminize ve optimizasyon aracınıza göre önerileri inceleyin:

Android Gradle eklentisi ve R8

R8 DEX kodu optimizasyonu puanlarınızı artırmak için R8 optimizasyonunu iyileştirme başlıklı kılavuza bakın. Uygulamanızın saklama kurallarını optimize etme konusunda ek rehberlik almak için R8 Analyzer becerisini de kullanabilirsiniz.

R8 dışı derleme sistemleri ve DEX işlem sonrası araçları

Derleme ardışık düzeninizde özel derleme araçları veya ikincil DEX işlem sonrası araçları kullanılıyorsa uygulamanızın optimizasyonunu iyileştirmek için aşağıdaki adımları uygulayın:

  • Uygulama paketinizi Android Studio'da açın ve APK Analiz Aracı'nda görüntüleyin.
  • .dex dosyaların tümünü seçin.
  • "Adları netleştir" düğmesini açıp kapatırken en büyük boyuta sahip dosyalara dikkat edin (Not: Bu işlem için mapping.txt dosyası yüklemeniz gerekir). Bu dosyalardan bazılarının karartılmış haldeyken büyük kalmaya devam ettiğini fark ederseniz bu dosyalar paket genelinde saklama kurallarından etkileniyor olabilir.
  • proguard-rules.pro dosyanızda (configuration.txt) veya R8 kullanmıyorsanız optimize edicinizdeki eşdeğer dosyada, karartılmayan paketlerle eşleşen keep kurallarını arayın. Örneğin, dex'inizde büyük bir paket varsa com.foo. -keep com.foo.** biçimindeki veya -keep com.foo.bar.** biçimindeki saklama kurallarını arayın.
  • Kitaplık tüketicisi saklama kurallarının tanımlanması o kadar kolay olmayabilir. Bir kitaplık tüketici kuralının optimizasyonu etkilediğinden şüpheleniyorsanız AGP'nin son sürümünü kullanarak bağımsız bir örnek uygulamaya ekleyip R8 Yapılandırma Analiz Aracı ile inceleyerek yerel olarak doğrulayabilirsiniz.