日誌分析
使用adb獲取日誌
$ adb logcat
$ adb logcat > logcat_1215.log
I/SystemServer( 553): Package Manager
D/SELinuxMMAC( 553): Couldn't find install policy /data/security/mac_permissions.xml
W/PackageManager( 553): Unknown permission com.android.smspush.WAPPUSH_MANAGER_BIND in package com.android.phone
其中 I
D
W
表示日誌優先級,類似於 Info
Error
I
:INFOD
:DEBUGW
:WARINGE
:ERROR
斜槓後面表示日誌的 輸出模塊
括號中爲當前的 進程號
冒號後面內容爲 日誌主體
拉取 traces.txt
文件(追蹤信息)
$ adb pull /data/anr/traces.txt /Users/zhongxin/Desktop
關鍵字
fatal exception
嚴重異常ANR IN
性能指標
CPU
很多時候,手機發熱發燙。是因爲CPU使用率過高,CPU過於繁忙,會導致手機無法響應用戶,整體性能降低,用戶體驗會很差,也容易引起ANR等一些列問題
CPU使用率分爲:用戶態
系統態
空閒態
用戶態:CPU處於用戶態執行的時間
系統態:CPU處於系統內核執行的時間
空閒態:CPU處於空閒系統進程執行的時間
CPU使用率=CPU執行非系統空閒進程的時間/CPU總的執行時間
HZ
Linux核心每隔固定週期會發出timer interrupt(IRQ 0),HZ是用來定義每一秒有幾次timer interrupt
Tick
Tick是HZ的倒數,Tick = 1/HZ
即timer interrupt每發生一次中斷的時間
Jiffies
Linux核心變數,是一個unsigned long類型的變量,它被用來記錄系統自開機以來,已經過了多少tick。
每發生一次timer interrupt,Jiffies變數會被+1
CPU使用率=(用戶態Jiffies + 系統態Jiffies)/總Jiffies
CPU指標獲取
讀取proc文件
/proc/stat
/proc/<pid>/stat
cpu0
表示CPU核心
cpu1
表示CPU的第二個核心
cpu
表示總和
查看模擬器的配置:雙核的CPU
查找對於app的cpu使用情況
$ cat /proc/1757/stat
獲取當前進程的Jiffies
$ cat /proc/1757/stat | awk -F " " '{print $14,$15}'
第三方工具GT/soloPi
https://gt.qq.com/download.html
將日誌保存到文件中
拉取至本地
$ adb pull /sdcard/GT/GW/com.sankuai.meituan/5.5.4/20191215/Pcp0_com.sankuai.meituan_20191215100605.csv /Users/zhongxin/Desktop
soloPi無法安裝到模擬器,暫不演示
啓動時間
2-5-8原則
App啓動方式
冷啓動
後臺沒有進程,系統會重新創建一個新的進程分配給該應用
熱啓動
後臺已有該進程,會從已有進程來啓動應用
查找包名
android 7.0以下
$ adb shell dumpsys activity | find "mFocusedActivity"
android 8.0以上
$ adb shell dumpsys activity | find "mResumedActivity"
查看啓動時間
$ adb shell am start -W -n com.lemon.lemonban/com.lemon.lemonban.activity.WelcomeActivity
程序員角度:獲取打開應用到第一幀出現的時間
使用soloPi來進行屏幕錄製
錄屏數幀
人工錄製後數幀數
$ adb shell screenrecord --bugreport /sdcard/launch.mp4
流量
手機上網所產生的流量數據。
讀取proc文件
$ cat /proc/net/xt_qtaguid/stats
iface 網絡性質 wlan-wifi流量 lo本地流量 rmnet0-3g/2g流量
uidtagint 應用UID
cnt_set 應用前後臺標識位 1-前臺 0-後臺
rx_bytes 接收數據
tx_bytes 傳輸數據
查看具體app的流量
使用 ps
找到對於應用的 uid
:u0_a35 = 10000+35
lo:網絡類型
10035:應用UID
0:後臺
132324:接收的流量數據消耗
2321:發送的流量數據消耗
電量
電量影響因素
cpu
wakelock(保持喚醒鎖)
無線數據(2G/3G/4G)
wiif
藍牙
傳感器
相機
閃光燈
GPS
power_profile.xml文件:決定電量測試是否準備的標準文件
手機中的每個組件,如CPU,LCD,GPS,WIFI,BT等,運行時的能耗標準都保存在power_profile.xml中
由於android手機廠商的差異,每個硬件模塊耗電信息不同,所以每個廠商都會對power_profile.xml進行定製
android耗電量通過代碼估算,沒有硬件參與彙報,準確度取決於廠商ROM所提供的powerprofile.xml文件,不同廠商的powerprofile.xml準確度及源碼有差異,因此不同手機,不同版本的數據可能存在較大差異
系統源碼PowerProfile讀取power_profile.xml,並提供API訪問部件電流數值
怎麼獲取power_profile.xml:反編譯framework-res.apk