Temel Profiller, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarından kaçınarak ilk başlatmadan itibaren kod yürütme hızını yaklaşık% 30 artırır.
Bir uygulamada veya kitaplıkta Temel Profil gönderdiğinizde Android Çalışma Zamanı (ART), belirtilen kod yollarını Önceden (AOT) derlemesi aracılığıyla optimize ederek her yeni kullanıcı ve her uygulama güncellemesi için performans iyileştirmeleri sağlayabilir. Bu Profil Rehberli Optimizasyon (PGO) özelliği, uygulamaların ilk lansmandan itibaren başlangıcı optimize etmesini, etkileşim olumsuzluğunu azaltmasını ve genel çalışma zamanı performansını iyileştirmesini sağlar.
Bu performans iyileştirmeleri doğrudan kullanıcıları elde tutma, işlemler ve puanlar gibi daha iyi iş metrikleri sağlar. Josh, Lyft, TikTok ve Zomato'nun hikayelerinde performansın işletme metriklerini nasıl etkilediği hakkında daha fazla bilgi edinebilirsiniz.
Taban Profillerin Avantajları
Temel Profiller, uygulama başlatma, ekranlar arasında gezinme veya içerikte gezinme gibi tüm kullanıcı etkileşimlerini ilk kez çalıştırdıkları andan itibaren daha sorunsuz hale getirir. Temel Profiller, bir uygulamanın hızını ve yanıt verme hızını artırarak günlük etkin kullanıcı sayısını ve ortalama geri gelen ziyaret oranını artırabilir.
Referans profilleri, ilk başlatmadan itibaren uygulama çalışma süresini iyileştiren yaygın kullanıcı etkileşimleri sağlayarak optimizasyona uygulama başlangıcından daha fazla yön verir. Rehberli AOT derlemesi, kullanıcı cihazlarına bağlı değildir ve mobil cihaz yerine geliştirme makinesi üzerinde sürüm başına bir kez yapılabilir. Temel Profil ile sürümleri gönderdiğinizde, uygulama optimizasyonları yalnızca Bulut Profilleri'ne güvenmekten çok daha hızlı bir şekilde kullanıma sunulur.
Temel Profil kullanılmadığında, tüm uygulama kodları yorumlandıktan sonra bellekte JIT tarafından derlenir veya cihaz boştayken arka planda bir odex
dosyasına yazılır. Bir uygulamayı yükledikten veya güncelledikten sonra, kullanıcılar uygulamayı ilk kez çalıştırdıklarından yeni kod yolları optimize edilene kadar ideal olmayan bir deneyim yaşarlar.
Birçok uygulama, optimizasyondan sonra yaklaşık% 30'luk performans artışını ölçmektedir.
Başlangıç profilleri
Başlangıç profilleri, Temel Profillere benzer ancak aralarındaki fark, cihaz üzerinde optimizasyon yerine derleme sırasında kullanılmalarıdır. Başlangıç profilleri, DEX dosyasının düzenini optimize ederek başlatma sürelerini kısaltmak için kullanılır.
Başlangıç profilinde tanımlanan kod birincil classes.dex
dosyasına, diğer kod ise ayrı DEX dosyalarına yerleştirilir. Bu, uygulama başlatılırken karşılaşılan sayfa hatası sayısını azaltarak başlatma sürelerini iyileştirir. Başlangıç profillerinin ve DEX düzen optimizasyonlarının uygulama başlatma sürelerini nasıl iyileştirebileceği hakkında daha fazla bilgi edinmek için DEX düzen optimizasyonları ve başlangıç profilleri başlıklı makaleyi inceleyin.
Başlayın
Mevcut uygulamanızdaki performansı optimize etmeye başlamak için Referans Profili Oluşturma başlıklı makaleyi inceleyin.
Önerilen minimum kararlı sürüm sayısı
Bağımlılık zinciri, kararlı ve geliştirme sürümleri sağlar. Temel Profil oluşturmak ve yüklemek için aşağıdaki desteklenen veya Android Gradle eklentisi, Macrobenchmark kitaplığı ve Profil Yükleyici'nin daha yüksek sürümlerini kullanın. Bu bağımlılıklar farklı zamanlarda gerekir ve optimum bir Temel Profil sağlamak için birlikte bir araç zinciri olarak çalışır.
- Android Gradle eklentisi:
com.android.tools.build:8.0.0
- Makro karşılaştırma kitaplığı:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- Profil Yükleyici:
androidx.profileinstaller:profileinstaller:1.4.1
Referans profilleri oluşturmak ve yönetmek için AGP'nin en son sürümünü kullanmanızı öneririz. AGP'nin farklı sürümleriyle birlikte sunulan temel işlevler şunlardır:
AGP sürümü | Özellikler |
---|---|
8.4 | Gradle sarmalayıcı komut satırı aracı veya Android Studio'nun temel profillerini kullanarak hata ayıklama yapılamayan derlemelerin yerel uygulama yüklemeleri. Böylece yerel sürüm derlemenizin performansı üretime daha yakın olur. Bu güncelleme, referans profillerin üretim performansını etkilemez. |
8,3 |
|
8.2 |
|
8.0 | Önerilen minimum sürüm: Tek bir Gradle göreviyle temel profil oluşturmak için temel profil Gradle eklentisini kullanın.
|
7.4 |
Desteklenen minimum sürüm: Uygulamalar, kitaplıklardaki Temel Profilleri kullanabilir ve src/main/baseline-prof.txt dosyasında kendi Temel Profillerini sağlayabilir.
|
Profil oluşturma örneği
Aşağıda, uygulama başlatma işlemi için Temel Profil oluşturmaya yönelik bir örnek sınıf ve önerilen Macrobenchmark kitaplığını kullanarak çeşitli gezinme ve kaydırma etkinlikleri verilmiştir:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
Bu kodu GitHub'daki performans örneklerimizin bir parçası olarak tam bağlamda ve daha ayrıntılı bir şekilde görebilirsiniz.
Dahil edilecek bilgiler:
Bir uygulamada Temel Profilleri kullanırken uygulama başlangıç kodunu ve ekranlar arasında gezinme veya kaydırma gibi yaygın kullanıcı etkileşimlerini ekleyebilirsiniz. Kayıt, giriş veya ödeme gibi akışların tamamını da toplayabilirsiniz. Kritik olarak kabul ettiğiniz tüm kullanıcı yolculukları, çalışma zamanı performanslarını iyileştirerek Temel Profillerden yararlanabilir.
Performansı artırmak için farklı yaklaşımları denemeye çalışıyorsanız denemenizin her iki kolu için de referans profilleri ekleyebilirsiniz. Bu sayede, tüm kullanıcılarınızın sürekli olarak derlenmiş kod çalıştırmasını sağlayarak sonuçlarınızın yorumlanmasını kolaylaştırabilirsiniz.
Kitaplıklar kendi Temel Profillerini sağlayabilir ve uygulama performansını iyileştirmek için sürümlerle birlikte gönderebilir. Örneğin, Jetpack Compose performansında referans profil kullanma bölümüne bakın.
Temel profillerin işleyiş şekli
Uygulamanızı veya kitaplığınızı geliştirirken, oluşturma süresinin veya gecikmenin önemli olduğu yaygın kullanıcı etkileşimlerini kapsayacak şekilde referans profilleri tanımlayabilirsiniz. İşleyiş şekli:
Kullanıcı tarafından okunabilen profil kuralları, uygulamanız için oluşturulur ve uygulamada ikili biçimde derlenir. Bu kuralları
assets/dexopt/baseline.prof
içinde bulabilirsiniz. Ardından AAB'yi her zamanki gibi Google Play'e yükleyebilirsiniz.Google Play, profili işler ve APK ile birlikte doğrudan kullanıcılara gönderir. ART, yükleme sırasında profildeki yöntemlerin AOT derlenmesini gerçekleştirir, böylece bu yöntemler daha hızlı yürütülür. Profilde uygulama başlatılırken veya kare oluşturma sırasında kullanılan yöntemler varsa kullanıcı daha hızlı başlatma süreleri ve daha az takılma yaşayabilir.
Bu akış, Cloud Profiller toplamasıyla birlikte çalışarak uygulamanın zaman içindeki gerçek kullanımına göre performansta ince ayar yapar.
Cloud Profilleri
Cloud Profilleri, Temel Profiller ile birlikte Google Play Store tarafından toplanan ve yükleme zamanı derlemesi için dağıtılan ek bir PGO formu sunar.
Cloud profilleri, kullanıcıların uygulamayla gerçek dünyadaki etkileşimlerine dayanır. Ancak bir güncellemenin dağıtılması birkaç saat ile birkaç gün arasında sürebilir. Bu da profillerin kullanılabilirliğini sınırlandırır. Profiller tamamen dağıtılana kadar uygulama performansı yeni veya güncellenmiş uygulamaların kullanıcıları için optimum olmaz. Ayrıca Cloud Profiles yalnızca Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran Android cihazları destekler ve yalnızca yeterince geniş bir kullanıcı tabanına sahip olan uygulamalar için iyi ölçeklendirilir.
Android sürümlerindeki derleme davranışı
Android Platform sürümleri, her biri karşılık gelen bir performans dengesi olan farklı uygulama derleme yaklaşımları kullanır. Temel profiller, tüm yüklemeler için bir profil sağlayarak önceki derleme yöntemlerini iyileştirir.
Android sürümü | Derleme yöntemi | Optimizasyon yaklaşımı |
---|---|---|
5 ila 6 (API düzeyi 21 ila 23) | Tam AOT | Uygulamanın tamamı yükleme sırasında optimize edilir. Bu durum, uygulamayı kullanmak için uzun bekleme süreleri, RAM ve disk alanı kullanımında artış, diskten kod yükleme süresinin uzamasına neden olarak baştan başlatma sürelerini artırabilir. |
7'den 8.1'e kadar (API düzeyi 24'ten 27'ye) | Kısmi AOT (Temel Profil) | Temel profiller, uygulama modülü bu bağımlılığı tanımladığında ilk çalıştırma sırasında androidx.profileinstaller tarafından yüklenir. ART, uygulama kullanılırken ek profil kuralları ekleyerek ve cihaz boştayken bunları derleyerek bu durumu daha da iyileştirebilir. Bu, disk alanını ve diskten kod yükleme süresini optimize ederek uygulamanın bekleme süresini kısaltır. |
9 (API düzeyi 28) ve sonraki sürümler | Kısmi AOT (Referans Değer + Bulut Profili) | Play, APK'yı ve Cloud profillerini (varsa) optimize etmek için uygulama yüklemeleri sırasında Temel Profilleri kullanır. Yükleme işleminden sonra ART profilleri Play'e yüklenir, birleştirilir ve ardından uygulamayı yükleyen veya güncelleyen diğer kullanıcılara Cloud Profili olarak sağlanır. |
Bilinen sorunlar
Aşağıda, olası sorunlar ve çözümler ya da geçici çözümler için geliştirmelerin devam ettiği sorunlar verilmiştir:
OnePlus cihazlar da dahil olmak üzere bazı cihazlardaki izin ayarları nedeniyle temel profil oluşturma işlemi başarısız olabilir. Bu sorunu gidermek için Geliştirici Seçenekleri ayarlarında İzin izlemeyi devre dışı bırak seçeneğini kapatın.
Temel profil oluşturma, Gradle tarafından yönetilen Test Lab cihazları da dahil olmak üzere Firebase Test Lab cihazlarında desteklenmez (sorun #285187547).
Kitaplıklara Temel Profilleri başarıyla sağlamak için en az Temel Profil Gradle eklentisi 1.2.3 veya AGP 8.3 sürümünü kullanın (sorun numarası: 313992099).
./gradlew app:generateBaselineProfile
komutuyla Temel Profiller oluşturursanız test modülündeki karşılaştırmalar da çalışır ve sonuçlar silinir. Bu durumda, komutu-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
ile çalıştırarak yalnızca temel profilleri oluşturabilirsiniz. Bu sorun AGP 8.2'de düzeltilmiştir.Tüm derleme türleri (
./gradlew app:generateBaselineProfile
) için Temel Profiller oluşturma komutu, sürüm derleme türü için yalnızca Temel Profiller oluşturur. Bu sorun AGP 8.1'de düzeltilmiştir.Google Play Store dışındaki uygulama dağıtım kanalları, yükleme sırasında Temel Profillerin kullanımını desteklemeyebilir. Bu kanallar üzerinden yüklenen uygulamaların kullanıcıları, muhtemelen bir gecede arka planda kaldırma işlemi çalışana kadar avantajları görmezler.
Play Store dahili uygulama paylaşımı, referans profilleri desteklemez ancak dahili test kanalı bu özelliği destekler.
Huawei cihazlar gibi bazı cihazlardaki pil optimizasyonları, profil yükleme işlemini engelleyebilir. Profillerinizin etkili bir şekilde yüklenmesini sağlamak için karşılaştırma cihazlarınızdaki pil optimizasyonlarını devre dışı bırakın.
Ek kaynaklar
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Temel Profiller Oluşturma {:#create-profile-rules}
- Makro Karşılaştırma olmadan referans profilleri oluşturma ve ölçme
- DEX düzen optimizasyonları ve başlangıç profilleri