ProfilingManager entegrasyonunuzu yerel olarak test ederken istekler sıklık sınırlaması nedeniyle kısıtlanabilir veya tetikleyiciler test edilirken arka plan izleri etkin olmayabilir. Kısıtlamayı devre dışı bırakmak, profilleri almak, düzenlenmemiş izleri saklamak, yakalamaları tetiklemek ve test cihazındaki hizmet durumunu incelemek için bu sayfadaki adb komutlarını kullanın.
Sıklık sınırlayıcıyı devre dışı bırakma
Yerel test sırasında requestProfiling istekleri için uygulama işlemi ve sistem hızı sınırlayıcılarını devre dışı bırakmak istiyorsanız aşağıdaki device_config komutunu çalıştırın:
adb shell device_config put profiling_testing rate_limiter.disabled true
Testi tamamladığınızda işareti sıfırlayın:
adb shell device_config delete profiling_testing rate_limiter.disabled
ADB kullanarak profilleri alma
Kök erişimi olan bir cihazda, çıkartılmış bir profili yerel olarak incelemek için getResultFilePath tarafından döndürülen yol ile adb
pull komutunu çalıştırın:
# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>
Geçici ve düzeltilmemiş sonuçları saklama
Profil oluşturmayı yerel olarak test ederken sonuçları /data/misc/perfetto-traces/profiling/ adresindeki geçici dizinde saklayabilirsiniz. Sansürlenmemiş bir sistem izini sansürlenmiş haliyle karşılaştırmak, sansürleme sırasında hangi verilerin çıkarıldığını anlamanıza yardımcı olur.
Geçici ve sansürlenmemiş sonuçların nasıl saklanacağı, cihazınızın kullandığı Android sürümüne bağlıdır:
Android 16 (API düzeyi 36) ve sonraki sürümler: Hem düzeltilmemiş (uygun olduğunda) hem de düzeltilmiş sonuçları geçici dizinde saklayabilirsiniz. Bu dizin, Android 16'da kök erişimi olmadan tüm derleme türlerinde
adb pullkullanılarak erişilebilecek şekilde genişletilmiştir (Android 15'te/data/misc/perfetto-traces/profiling/dosyasını okumak için kök erişimi gerekir). Sistemin geçici sonuçları silmesini önlemek için aşağıdaki komutu çalıştırın:adb shell device_config put profiling_testing delete_temporary_results.disabled trueAndroid 15 (API düzeyi 35): Geçici dizinde yalnızca düzeltilmemiş sonucu saklayabilirsiniz. Bu sonuca yalnızca kök erişimi olan derlemelerde
adbüzerinden erişilebilir. (Uygulamanız, kendi/data/user/0/<app>/files/profiling/dizininde, uygulama kodunuzun herhangi bir derlemede okuyabileceği veya kopyalayabileceği, düzenlenmiş profili almaya devam eder. Ancakadb pullile doğrudan/data/user/0/...dizininden çekmek için root erişimi veya hata ayıklanabilir bir derlemedeadb shell run-as <app>gerekir.) Sistemin, düzeltilmemiş izleri silmesini önlemek için aşağıdaki komutu çalıştırın:adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
Profil yakaladıktan sonra, saklanan dosyayı geçici dizinden alın:
# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>
# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted
Bu komutlarda <trace-name>, ProfilingResult.getResultFilePath tarafından döndürülen yoldaki temel dosya adıdır (uzantı olmadan). Düzenlenmemiş sistem izleme kopyası, .perfetto-trace uzantısına -unredacted ekler. Dosya adı yapısı ve <profile-type-ext> değerleri hakkında ayrıntılı bilgi için Dosya konumları ve adlandırma biçimleri başlıklı makaleyi inceleyin.
adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled
Tetikleyici testi için arka plan izlerini zorunlu olarak etkinleştir
Sistem arka plan izleri, üretimde rastgele aralıklarla çalıştığından tetikleyici tabanlı profillemeyi yerel olarak test etmek zor olabilir. Sistemi sürekli arka plan izleme çalıştırmaya ve uygulamanızın tetikleyicileri için sistem düzeyindeki sıklık sınırlayıcıyı atlamaya zorlamak istiyorsanız system_triggered_profiling.testing_package_name değerini ayarlayın:
adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>
setRateLimitingPeriodHours ile yapılandırılan tetikleyici başına bekleme süresi geçerliliğini korur. Bu mod, siz temizleyene kadar sürekli çalıştığından test işlemini tamamladığınızda işareti kaldırın:
adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name
Faydalı hata ayıklama komutları
Android 16 (API düzeyi 36) ve sonraki sürümlerde, son Profiling modül sürümüyle birlikte, ayrıntılı günlük kaydını etkinleştirmek, isteğe bağlı profil koleksiyonlarını tetiklemek ve tetikleyicileri doğrudan komut satırından test etmek için adb üzerinden cmd profiling_service aracını kullanabilirsiniz.
Ayrıntılı hata ayıklama günlüğünü etkinleştirme
logcat uygulamasında ayrıntılı ProfilingService günlüklerini etkinleştirmek ve istek işleme ile teslimat sorunlarını teşhis etmek için aşağıdaki komutu çalıştırın:
adb shell cmd profiling_service enable-logs true
Seç-izle profil toplama talebinde bulunma
Komut satırından belirli bir paket için anında profil yakalama işlemi başlatmak istiyorsanız aşağıdaki komutu çalıştırın:
adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]
Bu komutta <profiling_type>, ProfilingManager (Java yığın dökümü için 1, öbek profili için 2, yığın örnekleme için 3 veya sistem izleme için 4) içindeki tam sayı sabit değeridir. Bellek ve yığın profilleri için hedef uygulama işleminin çalışıyor olması gerekir. İstek, devre dışı bırakılmadığı sürece sıklık sınırlayıcıya tabidir ve tamamlanan ProfilingResult yalnızca registerForAllProfilingResults ile kayıtlı global dinleyicilere gönderilir.
Tetikleyicileri kaydetme ve simüle etme
Bir pakete ait tetikleyiciyi kaydetmek veya simüle edilmiş bir tetikleyici etkinliğini tetiklemek ve tetikleyici geri çağırma işleme sürecinizi doğrulamak için aşağıdaki komutları çalıştırın:
adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]
Bu komutlarda <trigger_type>, ProfilingTrigger içindeki tam sayı sabit değeridir (örneğin, TRIGGER_TYPE_APP_FULLY_DRAWN için 1, TRIGGER_TYPE_ANR için 2 veya TRIGGER_TYPE_OOM için 7). add-trigger komutunu çalıştırmak, tetikleyiciyi 0 saatlik bekleme süresiyle kaydeder ve bu tetikleyici türü için mevcut tüm kayıtları geçersiz kılar. Arka plan izinin anlık görüntüsünü kaydeden tetikleyicileri (ör. 1 veya 2) simüle etmek için etkin bir arka plan izi gerekir (Tetikleyici testi için arka plan izlerini zorunlu olarak etkinleştirme bölümüne bakın).
Genel ProfilingManager durumunu toplama
Android 16 (API düzeyi 36) ve sonraki sürümlerde, güncel bir Profiling modül sürümüyle sorunları teşhis etmek ve ProfilingManager'ün mevcut durumunu incelemek için profiling_service'e karşı dumpsys komutunu çalıştırabilirsiniz:
adb shell dumpsys profiling_service
dumpsys profiling_service çıkışı yalnızca bilgilendirme ve hata ayıklama amaçlıdır ve biçimi değişebilir. Bu döküm, hizmetin dahili durumunun anlık görüntüsünü sağlar. Bu görüntüde şunlar yer alır:
- Etkin kısıtlamalar ve sıklık sınırlayıcı durumu.
- Etkin cihaz yapılandırmaları.
- Kayıtlı uygulama tetikleyicileri ve bunların sıklık sınırlaması bekleme süreleri.
- Etkin ve sıraya alınmış profil oluşturma oturumları.
- Son profil oluşturma istekleri, tetikleyici gerçekleşmeleri ve sonuç yayınlama etkinlikleri.