fwrite

fwrite

twitter
github
email

AOSP调试指南

编译 Android#

使用 envsetup.sh 脚本初始化环境:source build/envsetup.sh 或者. build/envsetup.sh

如需查看可用命令的完整列表,请运行以下命令:hmm

Framework 调试#

top#

  1. VIRT:这个内存使用就是一个应用占有的地址空间,只是要应用程序要求的,就全算在这里,而不管它真的用了没有。写程序怕出错,又不在乎占用的时候,多开点内存也是很正常的;
  2. RES: resident memory usage。常驻内存。这个值就是该应用程序真的使用的内存,但还有两个小问题,一是有些东西可能放在交换盘上了(SWAP),二是有些内存可能是共享的;
  3. SHR:shared memory。共享内存。就是说这一块内存空间有可能也被其他应用程序使用着;
  4. DATA:数据占用的内存。这一块是真正的该程序要求的数据空间,是真正在运行中要使用的。

vmstat#

vmstat 是一个显示系统信息的命令。例如,它显示主存储器的可用容量和 CPU 的操作状态。 如果按原样执行 vmstat 命令,则会显示有关当前进程,内存,交换,设备,中断和 CPU 的信息。此外,如果附加 “- d” 或 “ - p” 选项,将显示分区和磁盘上的读 / 写状态等。指定 “-f” 选项时,从系统启动到命令执行将显示创建进程的次数。

meminfo#

cat /proc/meminfo

free#

-b	以字节显示容量(默认)
-k	显示容量,以千字节为单位
-m	显示容量,以MB为单位
-h  显示容量单位,包含G、M
-t	还显示物理内存和交换内存的总和

strace#

常用来跟踪进程执行时的系统调用和所接收的信号。

time#

测量从调用指定命令到结束所花费的时间,用户 CPU 时间和系统 CPU 时间。在指定命令的输出结果之后,将测量结果输出到标准错误输出。命令代码实际使用 CPU 的时间是用户 CPU 时间。因此,如果将不存在的命令作为 time 命令的参数,则用户 CPU 时间变为 0。睡眠时间不计算在内。

size#

显示一个目标文件或者链接库文件中的目标文件的各个段的大小

file#

确定并显示文件类型

addr2line#

解析 so 文件

跳过开机引导#

adb shell settings put global device_provisioned 1

readelf#

查看 ELF 格式的文件信息

logcat#

adb root;adb remount

清除缓存  adb logcat -c

如果不能清除,就指定区域清除  adb logcat -c main/system/event/kernel/all(日志缓冲区)

查看缓存  adb logcat -g
设置最大logcat缓存   adb logcat -G 100M

dump meminfo#

adb shell dumpsys meminfo
或者具体包
adb shell dumpsys meminfo packageName

printk#

  • 打印调试 log
printk("%d",intA);
  • 打印变量所占内存大小
printk("sizeof(*intA)=%d",sizeof(*intA);

查看 cpu 架构#

adb shell getprop ro.product.cpu.abi

service 服务#

服务列表:    adb shell service list
检测某服务是否存在:   adb shell service check SurfaceFlinger

Activity#

adb shell dumpsys activity top|grep ACTIVITY

adb shell am start -n ActivityName

获取参数#

getprop 查看机器的全部信息参数
getprop ro.serialno 查看机器的序列号
getprop ro.carrier 查看机器的CID号
getprop ro.hardware 查看机器板子代号
getprop ro.bootloader 查看SPL(Hboot)版本号
getprop ro.build.version.release 查看系统版本(8、9...)
getprop ro.build.display.id  获得厂商系统版本

cpu 频率#

root权限(直接输入su命令)
cd sys/devices/system/cpu/cpu0/cpufreq
ls文件如下

cpuinfo_cur_freq: 当前cpu正在运行的工作频率
cpuinfo_max_freq:该文件指定了处理器能够运行的最高工作频率 (单位: 千赫兹)
cpuinfo_min_freq :该文件指定了处理器能够运行的最低工作频率 (单位: 千赫兹)

屏幕#

查看:
adb shell
wm   size  获得手机当前分辨率
wm  density   获得手机当前屏幕密度(例如560dpi)

修改:
wm size 1096*2560
wm density 420

恢复:
wm size reset
wm density reset

查看虚拟地址#

adb root;adb remount
adb shell  
ps -A|grep camera 查看服务的进程号(例如4712)  
cd proc/4712  进入进程号的文件夹  
more maps 查看虚拟内存地址  

SELinux 模式#

  • adb shell setenforce 0(临时生效,关闭SELinux模式)
  • adb shell setenforce 1(启用,开启SELinux模式)

获取路径#

  • adb shell dumpsys SurfaceFlinger 最下方查看正在运行的APK
  • adb shell pm path "com.**" 获取路径

属性系统#

android 通过 SystemProperties 的 set 和 get 方法来控制很多东西,一般上层添加一个控制开关可以使用这个方法,在系统里面存在很多个 prop 文件。它们分别是 system/build.prop,system/etc/prop.default,vendor/build.prop,vendor/default.prop。下面分别来说下这几个文件的构成。

  • system/build.prop

这个主要是由 device\(platform) sample\product/system.prop, 还有在 build 目录下添加的 ADDITIONAL_BUILD_PROPERTIES

  • system/etc/prop.default

主要是系统添加的 PRODUCT_SYSTEM_DEFAULT_PROPERTIES

  • vendor/build.prop(比较重要)

主要是系统添加的 PRODUCT_PROPERTY_OVERRIDES,添加在 device.mk 的这个属性会被编译到这里,但是在 9.0 的系统,加到这里会无效,获取不到值。

  • vendor/default.prop(会被同目录的 build.prop 相同 property 覆盖)

主要是系统添加的 PRODUCT_DEFAULT_PROPERTY_OVERRIDES

前缀:

  • ro:只读属性,不能修改。
  • persist:修改属性后,重启依然有效。数据会保存到 /data/property 目录。其他前缀的属性被设置后,只是保存在内存中而已,并没有保存到磁盘,所有重启后就恢复默认值了。
  • ctrl:用来启动和停止服务。每一项服务必须在 init.rc 中定义。init 一旦收到设置 ctrl.start 属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入 init.svc.<服务名> 属性中。
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。