linux和android调试概要
1. 抓取linux内核启动的完整信息需要增大缓冲区大小,目前默认为128KB,参考链接:点击打开链接2.Android内核开发:学会分析系统的启动log点击打开链接3.将init进程的详细log输出到dmesg文件中修改/system/core/rootdir/init.rc,把loglevel从3改为74. framework的调试4.1 比如修改fra...
1. 抓取linux内核启动的完整信息
需要增大缓冲区大小,目前默认为128KB,参考链接:点击打开链接
2.Android内核开发:学会分析系统的启动log点击打开链接
3.将init进程的详细log输出到dmesg文件中
修改/system/core/rootdir/init.rc,把loglevel从3改为7
4. framework的调试
4.1 比如修改frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView.java
对应SystemUI.apk,可调用Log.i, Log.d ,Log.e增加打印信息,进入frameworks\base\packages\SystemUI目录下mm生成新的apk在out目录下的system\priv-app\SystemUI下,然后push到系统对应的目录下,重启即可。
5.音频调试可以用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.内存adb shell dumpsys meminfo
更合适的方法cat /proc/meminfo
adb shell "cat /proc/meminfo" E:\debug\meminfo.txt,看MemAvailable的内容,比如我的
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线也没关系
如果要打印的log再加上系统时间的话该怎么办呢?logcat -v time > log.txt&
11.获取APP UID
(1) 系统刚启动的时候,会对每个app分配一个uid,
最简单的获取方式就是通过adb ,不过限于eng或userdebug版
adb pull data/system/packages.list d:\
参考点击打开链接
(2) 通过PS命令获取
在adb shell敲入ps,得到运行的进程的列表,如下一个小截屏:
u0_a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Process.java中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的数字就是该应用的UID值减去FIRST_APPLICATION_UID所得的值,所以,对于com.android.systemui,它的user是u0_a12,按前面的规制,它的UID就是12 + FIRST_APPLICATION_UID = 10012。
参考点击打开链接
12. 涉及SEAndroid权限问题,程序创建目录的时候有权限问题系统会打印出avc的log,根据log来配置
13.打开和关闭飞行模式
//开启飞行模式
settings put global airplane_mode_on 1
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
//关闭飞行模式
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.查看经常是否在运行
比如ps | grep memdetector
18.file_contexts.bin 和 file_contexts互转,支持到android8.来自于点击打开链接
file_contexts.bin 转换成 file_contexts,命令如下:
./sefcontext -o file_contexts file_contexts.bin sefcontext
file_contexts 转换成 file_contexts.bin,命令如下:
./sefcontext_compile -o file_contexts.bin file_contexts sefcontext_compile
19.Android ART模式,不重新烧录system.img的情况下如何修改framework和app
(1)编译
(2)连接手机
(3) croot && adb remount && adb sync system && adb reboot
第三步省去了重新烧版本的麻烦
20. adb logcat 2>&1 | tee log.log
2是标准错误,&1是标准输出,2>&1意思就是将标准错误输出到标准输出中。
21.C/C++ file log
22. 内核中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.背光设置
adb shell settings get system screen_brightness
adb shell settings put system screen_brightness 150
26.编译的时候,用 screen 开一个会话吧,这样断网了也不会影响编译
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分区,make vnod可以编译生成vendor.img
30. 执行dmesg命令,可以查看全部消息。如果想把log信息保存到文件,可以用adb shell dmesg >D:/Kernel.log.
31. adb shell 然后执行 cat /proc/kmsg。程序里面用printk函数打印的信息会显示出来。用cat /proc/kmsg命令打印出来的信息跟与dmesg 有不同, 第一次执行/proc/kmsg 打印到当前时间的所有内核信息,再次执行cat /proc/kmsg,不会再打印已经打印的信息,只打印上一次执行之后打印出来的新的信息。
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 是查看和设置显示信息的指令,此指令只能临时调试使用,比如wm density:查看和设置显示密度
Android wm指令用法详解 - LeeAaron - 博客园
35.抓avc log
adb shell
su
dmesg | grep avc (这个是一次性出来的)
logcat -v time | grep avc (这个是持续抓的)
可以开两个DOS窗口抓取
36.查看是否是签名的系统
37. i2c-tools、设备树等工具,便于开发调试
38. cat /proc/interrupts | grep ExtVoiceWakeup获取中断信息
更多推荐
所有评论(0)