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 tarafından sunulanlar da dahil olmak üzere geniş kapsamlı veya gereksiz tutma kurallarını belirleyen analiz aracı, R8'in sınıflarınızın, alanlarınızın ve yöntemlerinizin mümkün olduğunca çoğunu 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-alpha05 ve sonraki sürümlerde, R8 derlemesi çalıştırılırken rapor otomatik olarak build/outputs/mapping/release/configanalyzer.html içinde oluşturulur. Çı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ü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 bilgi sağlar. Bu sayede R8'den maksimum optimizasyonu elde ederek uygulama performansınızı 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üçülen skor

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 yapabileceğ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şlatma ve bellek performansını iyileştirir. 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.

Karartma puanı

R8, sınıfları, alanları ve yöntemleri daha kısa adlarla karartarak uygulamanın meta veri ayak izini küçültü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 optimizasyonunun kilidini açmak için, R8'in uygulamanızı optimize etmesini gereksiz yere engellemeyecek şekilde saklama kurallarınızı hassaslaştırmanız gerekir. Yalnızca yansıtma kullanılarak erişilen sınıfları, yöntemleri veya alanları saklamanız gerekir.

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

Saklama kuralı analizi örneği
Ş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ı analizi örneği
Ş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 Analiz Aracı'nda 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. Doğru koruma seçeneğini belirleyip en iyi uygulamaları izleyerek yalnızca gerekli sınıfları, alanları veya yöntemleri hedefleyerek koruma kuralları nedeniyle 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ğinden 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 bir saklama 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

  • Bir kitaplıkta çok 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çindeki bir sınıfı hedefleyen ve ilk koruma kuralı tarafından korunan 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, R8'in optimizasyon özelliklerinin tüm potansiyelinden yararlanırken yalnızca temel kodun korunmasını sağlamak için yapılandırmanızı kolaylaştırmayı 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 keep 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 yapılandırma analizcisini kullanarak karşılaştırı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ş kapsamlı tutma kuralını kaldırın. Bu, 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 karmaşadır. Yalnızca belirlediğiniz sınıfları, alanları veya yöntemleri hedeflemek için geniş kuralı daralttığınızdan emin olun.

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ınlanan derleme 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 derlemenizde sıfır sınıf, yöntem veya alanla eşleşen 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 bildirimlerini içeren kurallar 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.