linux和android调试概要
1. 抓取linux內(nèi)核啟動的完整信息
需要增大緩沖區(qū)大小,目前默認(rèn)為128KB,參考鏈接:點擊打開鏈接
2.Android內(nèi)核開發(fā):學(xué)會分析系統(tǒng)的啟動log點擊打開鏈接
3.將init進(jìn)程的詳細(xì)log輸出到dmesg文件中
修改/system/core/rootdir/init.rc,把loglevel從3改為7
4. framework的調(diào)試
4.1 比如修改frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView.java
對應(yīng)SystemUI.apk,可調(diào)用Log.i, Log.d ,Log.e增加打印信息,進(jìn)入frameworks\base\packages\SystemUI目錄下mm生成新的apk在out目錄下的system\priv-app\SystemUI下,然后push到系統(tǒng)對應(yīng)的目錄下,重啟即可。
5.音頻調(diào)試可以用tinymix命令,參考鏈接點擊打開鏈接
6.msm8937_camera.xml替換和修改
7.查看CPU占用adb shell top ?-d 1 -s cpu |findstr com.golive.cinema
8.查看具體apk占用adb shell dumpsys cpuinfo|findstr com.golive.cinema
9.內(nèi)存adb shell dumpsys meminfo
更合適的方法cat ?/proc/meminfo
adb shell "cat /proc/meminfo" ?E:\debug\meminfo.txt,看MemAvailable的內(nèi)容,比如我的
MemTotal:??????? 1921372 kB
MemFree:????????? 318416 kB
MemAvailable:??? 1125424 kB
各項的具體含義見
kernel\msm-3.18\Documentation\filesystems\proc.txt
10. logcat ?> ?/data/log.txt &可以在后臺打印出log 到log.txt中去,就算拔出USB線也沒關(guān)系
如果要打印的log再加上系統(tǒng)時間的話該怎么辦呢?logcat -v time > log.txt&
11.獲取APP UID
(1)?系統(tǒng)剛啟動的時候,會對每個app分配一個uid,
最簡單的獲取方式就是通過adb ,不過限于eng或userdebug版
adb pull ?data/system/packages.list ? d:\
參考點擊打開鏈接
(2) 通過PS命令獲取
在adb shell敲入ps,得到運行的進(jìn)程的列表,如下一個小截屏:
u0_a開頭的都是Android的應(yīng)用進(jìn)程,Android的應(yīng)用的UID是從10000開始,到19999結(jié)束,可以在Process.java中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的數(shù)字就是該應(yīng)用的UID值減去FIRST_APPLICATION_UID所得的值,所以,對于com.android.systemui,它的user是u0_a12,按前面的規(guī)制,它的UID就是12 + FIRST_APPLICATION_UID = 10012。
參考點擊打開鏈接
12. 涉及SEAndroid權(quán)限問題,程序創(chuàng)建目錄的時候有權(quán)限問題系統(tǒng)會打印出avc的log,根據(jù)log來配置
13.打開和關(guān)閉飛行模式
//開啟飛行模式
settings put global airplane_mode_on 1
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
//關(guān)閉飛行模式
settings put global airplane_mode_on 0
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
14.echo “7 7 1 7” > /proc/sys/kernel/printk
15.cat 重定向到你的cache下
cat init.rc > /cache/1.txt
16 升級包的update-binary和updater-script
剛開始來之out目錄下的ota.zip包,其中update-binary源代碼位于bootable\recovery\updater下。可通過mmma bootable/recovery/updater的方式編譯,但此編譯方式和整個編譯make -j32方式生成的updater路徑和大小不一樣
(1) mmma bootable/recovery/updater
編譯生成為out\target\product\msm8937_64\system\bin\updater下,大小為1189KB
(2) make -j32
編譯生成為out\target\product\msm8937_64\symbols\system\bin\updater,大小為12075KB
將updater重命名為update-binary即可。
17.查看經(jīng)常是否在運行
比如ps | grep memdetector
18.file_contexts.bin 和 file_contexts互轉(zhuǎn),支持到android8.來自于點擊打開鏈接
file_contexts.bin 轉(zhuǎn)換成 file_contexts,命令如下:
./sefcontext -o file_contexts file_contexts.bin ?sefcontext
file_contexts 轉(zhuǎn)換成 file_contexts.bin,命令如下:
./sefcontext_compile -o file_contexts.bin file_contexts ?sefcontext_compile
19.Android ART模式,不重新燒錄system.img的情況下如何修改framework和app
(1)編譯
(2)連接手機(jī)
(3) croot && adb remount && adb sync system && adb reboot?
第三步省去了重新燒版本的麻煩
20.?adb logcat 2>&1 | tee log.log
2是標(biāo)準(zhǔn)錯誤,&1是標(biāo)準(zhǔn)輸出,2>&1意思就是將標(biāo)準(zhǔn)錯誤輸出到標(biāo)準(zhǔn)輸出中。
21.C/C++? file log
22. 內(nèi)核中C文件log
23.fastboot分割鏡像文件過大的解決方法
sending sparse 'system' (524307 KB)...
FAILED (remote: data too large)
finished. total time: 35.354s
Flash system error
解決方法:
fastboot flash -S 500M system system.img
fastboot支持的-S選項:
options:
-S <size>[K|M|G] ? ? ? ? ? ? ? ? ? ? ? ? Automatically sparse files greater ?than 'size'. 0 to disable.
24.adb命令打開攝像頭
adb shell am start -a android.media.action.STILL_IMAGE_CAMERA
25.背光設(shè)置
adb shell settings get system screen_brightness
adb shell settings put system screen_brightness 150
26.編譯的時候,用 screen 開一個會話吧,這樣斷網(wǎng)了也不會影響編譯
27. push文件到根目錄/,比如init.rc
先adb root、adb remount、mount?-o?rw?-o?remount?/dev/block/actb?/? ,這樣就可以push了,否則提示?remote Read-only file system
28. *#06#查看MEID和IMEI號
29.android開始增加vendor分區(qū),make vnod可以編譯生成vendor.img
30.?執(zhí)行dmesg命令,可以查看全部消息。如果想把log信息保存到文件,可以用adb shell dmesg >D:/Kernel.log.
31.?adb shell 然后執(zhí)行 cat /proc/kmsg。程序里面用printk函數(shù)打印的信息會顯示出來。用cat /proc/kmsg命令打印出來的信息跟與dmesg 有不同, 第一次執(zhí)行/proc/kmsg 打印到當(dāng)前時間的所有內(nèi)核信息,再次執(zhí)行cat /proc/kmsg,不會再打印已經(jīng)打印的信息,只打印上一次執(zhí)行之后打印出來的新的信息。
32.adb命令播放mp3文件
adb shell am start -a android.intent.action.VIEW -t "audio/mp3" -d "file:///storage/emulated/0/Music/test.mp3"
33.adb命令撥打電話和掛掉
adb shell am start -a android.intent.action.CALL -d tel:10010
掛斷:adb shell service call phone 3
34.wm 是查看和設(shè)置顯示信息的指令,此指令只能臨時調(diào)試使用,比如wm density:查看和設(shè)置顯示密度
Android wm指令用法詳解 - LeeAaron - 博客園
35.抓avc log
adb?shell
su
dmesg?|?grep?avc???(這個是一次性出來的)
logcat?-v?time?|?grep?avc?(這個是持續(xù)抓的)
可以開兩個DOS窗口抓取
36.查看是否是簽名的系統(tǒng)
37. ?i2c-tools、設(shè)備樹等工具,便于開發(fā)調(diào)試
Index of /pub/software/utils/
38.?cat?/proc/interrupts?|?grep?ExtVoiceWakeup獲取中斷信息
總結(jié)
以上是生活随笔為你收集整理的linux和android调试概要的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android使用adb抓完整Log
- 下一篇: Android内核开发:学会分析系统的启