Etkinlikler ve Programlar

Uygulamanızı küçültmek, optimize etmek ve hızlandırmak için R8'i kullanma

Okuma süresi: 5 dakika
Ben Weiss
Geliştirici İlişkileri Mühendisi

Uygulamanızı küçültmek, optimize etmek ve hızlandırmak için R8'i kullanma

Android Performance Spotlight Week'in ilk gününe hoş geldiniz.

Uygulamanızın performansını artırmak için yapabileceğiniz en etkili ve en az çaba gerektiren değişiklikle başlıyoruz: R8 optimize edicisini tam modda etkinleştirme.

R8'i uygulamanızın boyutunu küçültmek için kullanılan bir araç olarak biliyor olabilirsiniz. Kullanılmayan kodları ve kaynakları kaldırarak uygulamanızın boyutunu küçültme konusunda mükemmel bir iş çıkarır. Ancak asıl gücü, gerçekten g-R8 olduğu alan, optimizasyondur.

Tam modu etkinleştirip optimizasyonlara izin verdiğinizde R8, derin ve program genelinde optimizasyonlar gerçekleştirerek kodunuzu temel olarak daha verimli olacak şekilde yeniden yazar. Bu sadece küçük bir değişiklik değil.

Bu makaleyi okuduktan sonra YouTube'da R8 optimize edicinin tanıtıldığı Performans Spotlight Week videosuna göz atın.

R8, uygulamanızın performansını nasıl artırır?

image.png

R8 optimize edicinin uygulama performansını artırmak için attığı en büyük adımlara yakından bakalım.

Uygulama boyutunu küçültmek için en önemli adım gereksiz kodları kaldırmaktır. Bu aşamada R8 optimizasyon aracı, uygulamanızın bağlı olduğu kitaplıklardaki kullanılmayan kodları ve kendi kod tabanınızdaki ölü kodları kaldırır.

Yöntem satır içi, yöntem çağrısını gerçek kodla değiştirerek çalışma zamanı performansını artırır.

Kodu daha kompakt hale getirmek için sınıf birleştirme ve diğer stratejiler uygulanır. Arayüzler ve sınıf hiyerarşileri gibi tüm güzel soyutlamalarınız bu noktada önemli değildir ve büyük olasılıkla kaldırılır.

Kod sadeleştirme, sınıfların, alanların ve yöntemlerin adlarını daha kısa ve anlamsız olanlarla değiştirmek için kullanılır. Bu nedenle, MyDataModel yerine a adlı bir sınıfınız olabilir. Bu, R8 ile optimize edilmiş bir uygulamadan gelen yığın izlemeleri okunurken en çok kafa karışıklığına neden olan durumdur. (AGP 9.0'da bu durumu iyileştirdiğimizi unutmayın.)

Kaynak küçültme, xml dosyaları ve çizilebilir öğeler gibi kullanılmayan kaynakları kaldırarak uygulamanın boyutunu daha da küçültür.

R8 optimize edicisi, bu adımları uygulayarak uygulama başlatma sürelerini iyileştirir, daha az yavaş ve donmuş kareyle daha sorunsuz kullanıcı arayüzü oluşturma olanağı sağlar ve cihaz üzerinde genel kaynak kullanımını iyileştirir.

Başarılı Örnek: Reddit'in R8 ile performans iyileştirmeleri

R8'in sağlayabileceği performans iyileştirmelerine bir örnek olarak Reddit'teki bir örneğe göz atalım. Reddit for Android uygulamasında R8 tam modda etkinleştirildikten sonra çeşitli alanlarda önemli performans iyileştirmeleri görüldü.

image.png

Altyazı: R8, Reddit'in uygulama performansını nasıl iyileştirdi?

Ekip, % 40 daha hızlı sıfırdan başlatma, "Uygulama Yanıt Vermiyor" (ANR) hatalarında% 30 azalma, % 25 daha iyi çerçeve oluşturma ve % 14 daha küçük uygulama boyutu elde etti.

Bu geliştirmeler, kullanıcı memnuniyeti açısından çok önemlidir. Daha hızlı başlatma, daha az bekleme ve içeriğe daha hızlı erişim anlamına gelir. Daha az ANR, daha kararlı ve güvenilir bir uygulamaya yol açarak kullanıcıların hayal kırıklığını azaltır. Daha akıcı çerçeve oluşturma, kullanıcı arayüzündeki duraklamaları ortadan kaldırarak kaydırma ve animasyonların akıcı ve duyarlı olmasını sağlar. Bu olumlu teknik etki, kullanıcı duyarlılığında da açıkça görüldü.

Bu iyileştirmeler hakkında daha fazla bilgiyi blogumuzda bulabilirsiniz.

R8 kullanmanın teknik olmayan yan etkileri

İş ortaklarımızla yaptığımız çalışmalarda, bu teknik iyileştirmelerin kullanıcı memnuniyeti üzerinde doğrudan etkisi olduğunu ve kullanıcıları elde tutma, etkileşim ve oturum uzunluğuna yansıdığını gördük. Günlük, haftalık veya aylık etkin kullanıcı sayısı ile ölçülebilen kullanıcı bağlılığı da teknik performans iyileştirmelerinden olumlu yönde etkilenmiştir. Ayrıca, Play Store'daki uygulama puanlarının R8'in benimsenmesiyle birlikte yükseldiğini gördük. Bu bilgileri ürün sahipleriniz, CTO'larınız ve karar vericilerle paylaşmak uygulamanızın performansını hızlandırmanıza yardımcı olabilir.

image.png

Bu nedenle, performansın bilinçli bir şekilde optimize edilmesinin bir erdem olduğunu söyleyebiliriz.

Daha yüksek performanslı bir uygulamaya yönlendirme

R8 ile ilgili geliştirici kılavuzumuzun iyileştirilmesi gerektiği yönünde geri bildirimler aldık. Biz de işe koyulduk. R8 optimize edici için geliştirici kılavuzu artık çok daha uygulanabilir ve R8'i etkinleştirip hata ayıklamak için kapsamlı bir kılavuz sunuyor.

Dokümanlarda, optimizasyon dostu kitaplıklar seçmenin ve kararlılığı sağlamak için R8'in özelliklerini kademeli olarak kullanmanın önemini vurgulayarak, benimsemeyle ilgili üst düzey strateji konusunda size yol gösterilir. Bu aşamalı yaklaşım, hata ayıklaması zor olan sorunlar hakkında size rehberlik ederken R8'in avantajlarından güvenli bir şekilde yararlanmanızı sağlar.

R8 optimize edicisini kontrol etmenin temel mekanizması olan Keep kurallarıyla ilgili rehberliğimizi önemli ölçüde genişlettik. Artık saklama kurallarının ne olduğu, nasıl uygulanacağı ve bu kuralları yazıp sürdürmeyle ilgili en iyi uygulamalar konusunda size yol gösterecek bir bölüm sunuyoruz. Ayrıca, pratik ve uygulanabilir kullanım alanları ve örnekler sunarak yansıtma veya JNI yerel arayüzünün kullanımı yoluyla erişilen kod gibi, çalışma zamanında ihtiyaç duyulan kodların R8 tarafından kaldırılmasını nasıl doğru şekilde önleyeceğinizi anlamanıza yardımcı oluyoruz.

Belgelerde artık temel takip adımları ve gelişmiş senaryolar da ele alınıyor. Test ve sorun giderme ile ilgili bir bölüm ekledik. Böylece performans artışlarını doğrulayabilir ve ortaya çıkan olası sorunları ayıklayabilirsiniz. Gelişmiş yapılandırmalar bölümünde, belirli derleme varyantlarının nasıl hedefleneceği, hangi kaynakların tutulacağı veya kaldırılacağı konusunda nasıl özelleştirme yapılacağı açıklanır. Ayrıca, kitaplık yazarları için özel optimizasyon talimatları sunularak diğer geliştiricilerin kullanabileceği optimize edilmiş ve R8 dostu bir paket sağlamanız sağlanır.

R8 optimize edicinin tüm potansiyelini etkinleştirme

Android Gradle eklentisinin 8.0 sürümünden itibaren R8 optimize edici, varsayılan olarak "tam mod"u kullanır. Projeniz uzun yıllar boyunca geliştirildiyse devre dışı bırakmak için eski bir işaret içerebilir. gradle.properties dosyanızda bu satırı kontrol edin ve kaldırın.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Şimdi, yayın varyantı için uygulamanızın build.gradle.kts dosyasında R8'i etkinleştirip etkinleştirmediğinizi kontrol edin. isMinifyEnabled ve isShrinkResources değerleri true olarak ayarlanarak etkinleştirilir. Bu adımda varsayılan ve özel yapılandırma dosyalarını da iletebilirsiniz.

  release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

Başarılı örnek: Disney+ performans iyileştirmeleri

Disney+'taki mühendisler, uygulama performansına yatırım yapıyor ve uygulamanın kullanıcı deneyimini optimize ediyor. Bazen görünüşte küçük olan değişiklikler bile büyük bir etki yaratabilir. Ekip, R8 yapılandırmasını incelerken -dontoptimize işaretinin kullanıldığını tespit etti. Bu özellik, varsayılan bir yapılandırma dosyasıyla kullanıma sunulmuştu ve günümüzde hâlâ birçok uygulamada kullanılmaktadır.

Disney+ ekibi, proguard-android.txt yerine proguard-android-optimize.txt kullanmaya başladıktan sonra uygulamasının performansında önemli iyileşmeler gördü.

image.png

Bu değişikliği içeren yeni uygulama sürümü kullanıcılara sunulduktan sonra Disney+, uygulama başlatma hızında% 30 artış ve kullanıcı tarafından algılanan ANR sayısında% 25 azalma gördü. 

Bugün birçok uygulama, proguard-android.txt dosyasını kullanmaya devam ediyor. Bu dosya, dontoptimize işaretini içeriyor. Araçlarımızda yaptığımız iyileştirmeler bu noktada devreye giriyor.

Araç desteği

Android Studio Narwhal 3 Yeni Özellikler Güncellemesi'nden itibaren proguard-android.txt kullanırken hata analizi uyarısı görürsünüz.

image.png

AGP 9.0'dan itibaren ise dosya için tamamen destek vermeyeceğiz. Bu nedenle proguard-android-optimize.txt'a geçmeniz gerekir.

Ayrıca, R8 ile optimize edilmiş kodda hata ayıklamayı her zamankinden daha kolay hale getirmek için yeni Android Studio özelliklerine yatırım yaptık. AGP 9.0'dan itibaren, R8 ile işlenmiş derlemeler için Android Studio'nun logcat'indeki yığın izlerini otomatik olarak netleştirebilirsiniz. Bu sayede, tamamen optimize edilmiş bir uygulamada bile soruna neden olan tam kod satırını belirleyebilirsiniz. Bu konu, yarınki Android Performance Spotlight Week blog yayınında daha ayrıntılı olarak ele alınacaktır.

Sonraki Adımlar

YouTube'da R8 optimize edicinin tanıtıldığı Performance Spotlight Week videosunu izleyin.

📣 Performans görevi'ne katılın.

Avantajları kendiniz keşfetme zamanı.

Uygulamanızda R8 tam modunu bugün etkinleştirmenizi öneririz.

  1. Başlamak için geliştirici kılavuzlarımızı inceleyin: Uygulama optimizasyonunu etkinleştirme.
  2. Hâlâ proguard-android.txt kullanıp kullanmadığınızı kontrol edin ve kullanıyorsanız proguard-android-optimize.txt ile değiştirin.
  3. Ardından etkiyi ölçün. Farkı sadece hissetmeyindoğrulayın. Başlangıç sürelerinizi önce ve sonra ölçmek için  GitHub'daki Macrobenchmark örnek uygulamamızdaki kodu uyarlayarak performans kazançlarınızı ölçün.

Uygulamanızın performansında önemli bir iyileşme göreceğinizden eminiz. R8'i etkinleştirme veya R8 ile ilgili sorun giderme hakkında sorularınız varsa #optimizationEnabled etiketini kullanın. Size yardım etmek için buradayız.

Cuma günü "Android'e Sor" oturumunda sorularınızı yanıtlayacağız.

Performansla ilgili sorularınızı iletmek için #AskAndroid sosyal etiketini kullanın. Hafta boyunca sorularınızı takip ediyor ve 21 Kasım Cuma günü performansla ilgili "Android'e Sorun" oturumunda birkaçını yanıtlıyoruz. Yarın hata ayıklama ve sorun giderme konularını daha ayrıntılı ele alacağız. Bizi takip etmeye devam edin. Ancak şimdilik R8'i kullanmaya başlayarak uygulamanızı hızlı bir şekilde kullanıma hazır hale getirebilirsiniz.

Yazan:

Okumaya devam edin