R8 Yapılandırma Analiz Aracı'nı kullanma

R8 Yapılandırma Analiz Aracı, uygulamanızın yapılandırma kalitesiyle ilgili ayrıntılı analizler sağlayarak R8'in performans avantajlarını en üst düzeye çıkarmanıza yardımcı olmak için tasarlanmış bir araçtır. Bu araç, optimizasyon için kullanılabilen kod tabanınızın yüzdesini gösteren temel metrikleri (özellikle küçültme, optimizasyon ve karartma puanları) izleyerek R8 optimizasyonunu takip etmenize ve iyileştirmenize olanak tanır. Üçüncü taraf kitaplıkların sunduğu kurallar da dahil olmak üzere geniş kapsamlı veya gereksiz tutma kurallarını belirleyen analiz aracı, R8'in mümkün olduğunca çok sayıda sınıfınızı, alanınızı ve yönteminizi etkili bir şekilde optimize edebilmesini sağlamak için yapılandırmanızı iyileştirmenize yardımcı olur.

Raporu oluşturma

AGP 9.3.0 ve sonraki sürümlerde, R8 yapılandırma analiz aracı raporunu özel bir bağımsız Gradle görevi kullanarak veya R8 derlemesi sırasında otomatik olarak oluşturabilirsiniz.

Bağımsız Gradle görevini çalıştırın (Yerel kullanım için önerilir)

Saklama kurallarında aktif olarak yineleme yaparken APK'yı veya paketi tam olarak oluşturmadan değişikliklerinizin etkisini hızlıca değerlendirmek için bağımsız Gradle görevini kullanın:

./gradlew :app:analyzeReleaseR8Config

Bu görev, APK veya paket oluşturma işlemini atladığı için çok daha kısa bir geri bildirim döngüsü sağlar. Bu sayede, saklama kurallarınızın küçültme, optimizasyon ve karartma puanlarını nasıl etkilediğini hızlıca analiz edebilir ve bunları anında iyileştirebilirsiniz. HTML raporu app/build/reports/r8/r8-config-analyzer-release.html konumunda oluşturulur.

Normal derlemeler sırasında otomatik olarak oluşturulur.

Tam bir R8 sürüm derlemesi (ör. assembleRelease) çalıştırıldığında rapor, build/outputs/mapping/release/configanalyzer.html konumunda otomatik olarak oluşturulur. Normal derlemeler sırasında çıkışların otomatik olarak oluşturulmasını devre dışı bırakmak için aşağıdaki Gradle özelliğini ayarlayın:

android.experimental.r8.enableR8ConfigurationAnalyzer=false

AGP 9.2 ve önceki sürümler için

AGP 9.2 ve önceki sürümlerde, R8 ile derleme etkinleştirilmiş bir Gradle görevi çalıştırırken com.android.tools.r8.dumpkeepradiushtmltodirectory sistem özelliğini ayarlayın.

./gradlew assembleRelease \
    -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

Örneğin, HTML raporunu /tmp/r8analysis dizininde oluşturmak için aşağıdaki komutu kullanın:

# To create the /tmp/r8analysis folder.
mkdir -p /tmp/r8analysis

# To generate the report in the /tmp/r8analysis folder.
./gradlew assembleRelease \
    -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=/tmp/r8analysis

Raporu anlama

R8 Yapılandırma Analiz Aracı, uygulamanızın R8 yapılandırması ve her saklama kuralının uygulamanız üzerindeki etkisi hakkında bilgiler sağlar. Bu sayede, R8'den en iyi şekilde yararlanarak uygulamanızın performansını artırabilirsiniz. Kod tabanınızın ne kadarının R8 tarafından optimize edilebileceğini anlamak için aşağıdaki puanları kullanın.

Rapor özeti bölümü örneği
Şekil 1. Rapor özeti bölümünün bir örneği.

Küçültme skoru

R8, uygulamanızı küçülttüğünde kullanılmayan kodları ve kaynakları belirleyip ortadan kaldırarak uygulamanızın genel boyutunu küçültür. Böylece son derlemenizin mümkün olduğunca küçük olmasını sağlar. Küçültme puanı, küçültmeye tabi olan sınıfların, alanların ve yöntemlerin yüzdesini izler. Örneğin, %66'lık bir küçültme puanı, R8'in kod tabanınızın% 66'sında küçültme işlemi gerçekleştirebileceği anlamına gelir.

Optimizasyon puanı

R8, yöntem satır içi yapma ve sınıf birleştirme gibi optimizasyonlar gerçekleştirerek uygulamanızın başlatılmasında ve belleğinde iyileştirmeler sağlar. Optimizasyon puanı, R8 optimizasyonlarına tabi olan sınıfların, alanların ve yöntemlerin yüzdesini izler. Örneğin, optimizasyon puanı %66 ise R8'in yalnızca kod tabanınızın% 66'sında optimizasyon yapabileceği anlamına gelir.

Kod karartma skoru

R8, sınıfları, alanları ve yöntemleri daha kısa adlarla karartarak uygulamadaki meta veri yerleşimini azaltır ve böylece bellek tasarrufu sağlar. Karartma puanı, kod tabanınızda karartma için kullanılabilen kodun yüzdesini ölçer.

Saklama kurallarını hassaslaştırma

Puanları iyileştirmek ve daha iyi R8 optimizasyonu elde etmek için, saklama kurallarınızı R8'in uygulamanızı gereksiz yere optimize etmesini engelleyecek şekilde düzenlemelisiniz. Yalnızca yansıtma kullanılarak erişilen sınıfları, yöntemleri veya alanları saklamalısınız.

Bunu yapmak için Kural Analizini Sakla'yı kullanın.

Saklama kuralı analizine ilişkin bir örnek
Şekil 2. Saklama kuralı analizine örnek.

Bir kuralın ayrıntılı analizini görmek için kuralı tıklayarak ayrıntılar ekranını açın.

Saklama kuralı analizine ilişkin bir örnek
Şekil 3. Saklama kuralı analizine örnek.

Saklama kurallarını iyileştirme

Saklama kurallarınızı hassaslaştırmak ve uygulamanız için R8 optimizasyonlarının tüm potansiyelinden yararlanmak üzere aşağıdakileri yapın:

  1. Her saklama kuralı için, yapılandırma analizcisinde R8 tarafından optimize edilemeyen sınıfların, alanların ve yöntemlerin yüzdesini görün. Bunu, çok sayıda sınıf, alan veya yöntemde optimizasyonu engelleyen saklama kurallarını belirlemek için kullanın. Her saklama kuralı tarafından engellenen optimizasyon özellikleri de listelenir.
  2. Çok sayıda sınıfın optimize edilmesini engelleyen bir koruma kuralı görürseniz bu kuralın, yansıtma kullanılarak dinamik olarak çağrılmayan öğeleri koruyup korumadığını görmek için hangi sınıfların, alanların ve yöntemlerin koruma kuralı tarafından optimize edilmesinin engellendiğini kontrol etmeniz gerekir.
  3. Yalnızca gerekli sınıfları, alanları veya yöntemleri hedefleyerek doğru koruma seçeneğini belirleyin ve en iyi uygulamaları izleyerek koruma kuralları tarafından engellenen optimizasyonu azaltın.
  4. Saklama kuralının etkilenen sınıflarını, alanlarını ve yöntemlerini kapsayan testler yapın ve saklama kurallarını iyileştirin.

Kitaplıkların optimizasyonunu inceleme

Üçüncü taraf kitaplıkları entegre ettiğinizde, bu kitaplıklar genellikle R8 ile çalışmak için kendi tüketici koruma kurallarını içerir. Kitaplık yazarı, uygulamanızın nasıl olacağını tahmin edemediği için bazen gereğinden fazla sınıf, alan ve yöntemde optimizasyonu engelleyen, geniş kapsamlı ve muhafazakar kurallar yazar. Bu durum, R8'in uygulamanızın kitaplığın gerçek çalışma zamanı yürütmesiyle ilgisi olmayan bölümlerini optimize etmesini engelleyebilir. Uygulamanızın optimizasyonunu olumsuz etkileyen kurallar içeren kitaplıkları belirlemek için R8 Yapılandırma Analiz Aracı'nı kullanabilirsiniz.

Birleştirilmiş tüm tüketici saklama kurallarının birleşik etkisini incelemek için yapılandırma analiz aracını kullanın. Üçüncü taraf kitaplığından gelen her koruma kuralının etkisini analiz ederek uygulamanızda yüksek miktarda optimizasyonu engelleyen belirli üçüncü taraf kitaplıklarını belirleyip izleyebilirsiniz.

Kitaplıkları optimize etme

Üçüncü taraf kitaplıklar tarafından sunulan saklama kurallarını ele almak için aşağıdakileri yapın:

  • Bir kitaplıkta aşırı geniş kapsamlı bir kural varsa raporunuzdaki verilerle birlikte kitaplığın bakım sorumlusuyla iletişime geçerek mevcut kurallarının uygulamanızın optimizasyon puanlarını nasıl etkilediğini göstermenizi öneririz. Harici bir kitaplıksa sorunları bildirmeden önce kitaplıktaki mevcut hataları arayın.
  • Gerekirse belirli bir kitaplıktaki kuralları filtreleyerek olası iyileştirmeleri test edebilirsiniz. Kitaplığın kurallarını projenize aktarabilir, geniş kapsamlı olanları hariç tutabilir ve boyut ile performanstaki potansiyel kazanımları ölçmek için yapılandırma analizini yeniden çalıştırabilirsiniz.

Kapsanan kurallar

Birden fazla saklama kuralının çakıştığı ve kurallardan birinin gereğinden fazla optimizasyonu engellediği durumlar olabilir. Kod tabanınızda iki saklama kuralı varsa.

# Prevents optimization in the entire package
# Remove this to improve optimization
-keep class com.example.package.** { *; }

# Prevents optimization to the class inside the package
-keep class com.example.package.Myclass

Paketin tamamında optimizasyonu engelleyen ilk koruma kuralı, paketin içinde ilk koruma kuralı tarafından korunan bir sınıfı hedefleyen ikinci koruma kuralını kapsıyor. Saklama kuralları çakıştığında bir kural, gerekenden daha fazla optimizasyonu engelleyebilir. Bu çakışan kuralları iyileştirerek R8 optimizasyonunu en üst düzeye çıkarabilir ve teknik borcu ortadan kaldırabilirsiniz. Bu işlem, yalnızca temel kodun tutulmasını sağlamak için yapılandırmanızı basitleştirmeyi ve R8'in optimizasyon özelliklerinin tüm potansiyelini ortaya çıkarmayı içerir.

Rapor özeti bölümü örneği
Şekil 4. Rapordaki kapsanan kurallara ilişkin bir örnek.

Kapsanan kuralları optimize etme

  1. R8 Yapılandırma Analiz Aracı'nı kullanarak kapsayan saklama kurallarını bulun.
  2. Kod tabanınızda, yansıtma özelliğini kullanan ve koruma kurallarıyla korunması gereken sınıfları, alanları veya yöntemleri tam olarak belirleyin. Bu bilgiyi kullanarak saklama kurallarını iyileştirebilirsiniz.
  3. Aynı sınıfları, alanları veya yöntemleri hedefleyen her kuralın etkisini karşılaştırmak için yapılandırma analizcisini kullanın. Hangi saklama kuralının daha geniş, hangisinin daha dar olduğunu belirlemek için her saklama kuralının engellediği optimizasyon yüzdesini kullanabilirsiniz.
    1. Dar kural tam olarak yazılmışsa (yalnızca yansıtıcı olarak erişilen üyeler veya sınıflar tutuluyorsa) daha geniş olan tutma kuralını kaldırın. Bu işlem, paketinizin geri kalanı için R8 optimizasyonlarını güvenli bir şekilde etkinleştirir.
    2. Geniş kural doğru sınıfları hedefliyorsa geniş kuralı koruyun ve dar kuralı silin. Dar kural yalnızca gereksiz bir karmaşadır. Yalnızca belirlediğiniz sınıfları, alanları veya yöntemleri hedeflemek için geniş kapsamlı kuralı daraltmayı unutmayın.

Değişikliklerinizi doğrulayın ve test edin: Çakışmanın giderildiğinden emin olmak için yapılandırma analiz aracını yeniden çalıştırın. Ardından, yayın derlemesi oluşturun ve kod tabanının beklendiği gibi çalıştığından emin olmak için değişikliklerinizi test edin.

Gereksiz kuralları kaldırma

Yapılandırma analizcisini kullanarak, yapılandırmanızı karmaşık hale getiren eski tutma kurallarını belirlemek ve temizlemek için kod tabanınızı sistematik olarak denetleyebilirsiniz. R8 Yapılandırma Analiz Aracı, gereksiz kuralların iki temel kaynağını özellikle vurgular:

  • Kullanılmayan kurallar: Mevcut derlemenizdeki sınıflar, yöntemler veya alanlarla eşleşmeyen kurallar. Bu sorunlar genellikle kod yeniden düzenlemeden, bağımlılık kaldırmadan veya artık alakalı olmayan kopyalama-yapıştırma yapılandırmalarından sonra devam eder ve gereksiz yapılandırma karmaşıklığına yol açar.
  • Aynı kurallar: Aynı saklama kuralları, aynı sınıfları, alanları ve yöntemleri hedefleyen veya aynı ya da farklı saklama kuralı dosyalarında saklama kuralının yinelenen bildirimleri anlamına gelir.

Her iki kural türü de yapılandırmanıza karmaşıklık katarak bakımını ve hata ayıklamasını zorlaştırır. Bunları belirleyerek yapılandırmanızı temizleyebilirsiniz.