ADB
Commonds¶
基础命令¶
命令 | 含义 |
---|---|
adb devices | 查看设备连接情况 |
adb version | 查看版本 |
adb help | 查看帮助 |
adb shell | 进入adb sehll命令 |
adb shell top | 查看手机当前进程占用手机内存情况 |
adb shell kill -3 pid | 杀掉进程 |
adb logcat -v process | grep 8607 | 8607是进程 PID |
adb shell reboot -p | 关机 |
adb reboot | 重启 |
adb shutdown | 关机 |
adb root | root |
adb remount | 获取读写权限 |
adb kill-server | 关闭adb服务 |
adb start-server | 启动adb服务 |
adb shell stop | 关闭设备请求 |
adb shell start | 启动设备请求 |
adb shell su root setenforce 0 | 关闭seLinux模式 |
网络相关设置¶
命令 | 含义 |
---|---|
adb shell ifconfig | 查看手机IP |
adb tcpip 5555 | 设置手机tcpip |
adb connect IP | 连接IP |
屏幕display信息¶
命令 | 含义 |
---|---|
adb shell wm size | 查看分辨率 |
adb shell set wm size | 设置分辨率 |
adb shell wm density | 查看屏幕密度 |
adb shell wm density xxx | 设置屏幕密度 |
应用管理¶
查看应用列表¶
命令 | 含义 |
---|---|
adb shell pm list packages | 所有应用 |
adb shell pm list packages -f | 显示应用关联的 apk 文件 |
adb shell pm list packages -d | 只显示 disabled 的应用 |
adb shell pm list packages -e | 只显示 enabled 的应用 |
adb shell pm list packages -s | 只显示系统应用 |
adb shell pm list packages -3 | 只显示第三方应用 |
adb shell pm list packages -i | 显示应用的 installer |
adb shell pm list packages -u | 包含已卸载应用 |
<FILTER> |
包名包含 <FILTER> 字符串 |
安装与卸载APK¶
安装
命令 | 含义 |
---|---|
adb install -l xxx.apk | 将应用安装到保护目录 /mnt/asec |
adb install -r xxx.apk | 允许覆盖安装 |
adb install -t xxx.apk | 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用 |
adb install -s xxx.apk | 将应用安装到 sdcard |
adb install -d xxx.apk | 允许降级覆盖安装 |
adb install -g xxx.apk | 授予所有运行时权限 |
adb install --abi abi-identifier xxx.apk | 为特定 ABI 强制安装 apk,abi-identifier 可以是 armeabi-v7a、arm64-v8a、v86、x86_64 等 |
卸载
命令 | 含义 |
---|---|
adb uninstall [-k] \ |
<packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。 |
查看日志¶
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。
Android 日志¶
命令格式如下:
日志等级¶
Android 的日志分为如下几个优先级(priority),由上往下级别递增。
等级 | 英文 | 含义 |
---|---|---|
V | verbase | 级别最低,琐碎、不重要的日志信息 |
D | debug | 调试信息 |
I | info | 重要信息 |
W | warning | 警告信息 |
E | error | 错误信息 |
F | fatal | 严重错误信息 |
S | slient | 无记载 |
按某级别过滤日志则会将该级别及以上的日志输出。比如,命令:
日志缓冲区¶
基本命令
buffer选项可以填为:
命令 | 含义 |
---|---|
radio | 通信系统 |
system | 系统组件 |
event | event事件模块 |
main | java层 |
kernel | linux内核 |
all | 所有 |
内核 日志¶
命令:
输出示例:
[34096.252006] init: Control message: Could not find 'aidl/vendor.qti.qhcp.IQHDC/default' for ctl.interface_start from pid: 423 (/system/bin/servicemanager)
[34097.245918] init: Control message: Could not find 'aidl/vendor.qti.qhcp.IQHDC/default' for ctl.interface_start from pid: 423 (/system/bin/servicemanager)
[34097.254912] init: Control message: Could not find 'aidl/vendor.qti.qhcp.IQHDC/default' for ctl.interface_start from pid: 423 (/system/bin/servicemanager)
[34098.246388] init: Control message: Could not find 'aidl/vendor.qti.qhcp.IQHDC/default' for ctl.interface_start from pid: 423 (/system/bin/servicemanager)
[34098.254246] init: Control message: Could not find 'aidl/vendor.qti.qhcp.IQHDC/default' for ctl.interface_start from pid: 423 (/system/bin/servicemanager)
中括号里的 [34098.254246]
代表内核开始启动后的时间,单位为秒。
通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory
那一行前面的时间就是。
APK包相关命令¶
adb shell pm命令
adb shell pm -l 列出包列表
adb shell pm list packages 查看包名(同上)
adb shell pm path "PackageName" 获取包的路径(可以通过dump SF获取当前的活动包名)
adb shell pm list packages -f 查看包名对应的apk路径及名称
adb shell dumpsys 列出手机所有apk的详细信息
Dumpsys信息¶
服务列表信息¶
或者
常见服务信息列表¶
服务名 | 类名 | 功能 |
---|---|---|
gfxinfo | GraphicsBinder | 图像 |
SurfaceFlinger | 图像相关 | |
activity | ActivityManagerService | AMS相关信息 |
package | PackageManagerService | PMS相关信息 |
window | WindowManagerService | WMS相关信息 |
input | InputManagerService | IMS相关信息 |
power | PowerManagerService | PMS相关信息 |
batterystats | BatterystatsService | 电池统计信息 |
battery | BatteryService | 电池信息 |
alarm | AlarmManagerService | 闹钟信息 |
dropbox | DropboxManagerService | 调试相关 |
procstats | ProcessStatsService | 进程统计 |
cpuinfo | CpuBinder | CPU |
meminfo | MemBinder | 内存 |
dbinfo | DbBinder | 数据库 |
appops | app使用情况 | |
permission | 权限 | |
processinfo | 进程服务 | |
batteryproperties | 电池相关 | |
audio | 查看声音信息 | |
netstats | 查看网络统计信息 | |
diskstats | 查看空间free状态 | |
jobscheduler | 查看任务计划 | |
wifi | wifi信息 | |
diskstats | 磁盘情况 | |
usagestats | 用户使用情况 | |
devicestoragemonitor | 设备信息 |
dump方法¶
dumpsys <service> 打印具体某一项服务(service就是前面表格中的服务名)
例如: (adb shell)
dumpsys cpuinfo //打印一段时间进程的CPU使用百分比排行榜
dumpsys meminfo -h //查看dump内存的帮助信息
dumpsys package <packagename> //查看指定包的信息
dumpsys SurfaceFLinger //查看SF服务
dump SurfaceFlinger信息¶
adb shell dumpsys SurfaceFlinger
一般包含:
1、layer的信息,layer一般对应于一个surface;
2、opengl的信息。一般是跟gpu比较相关的参数,opengl是标准的接口;
3、display。安卓支持三种类型的display,可以导出display当前的显示状态,也就是各个surface(layer)在各个display的显示属性;
4、surfaceflinger管理graphis buffer的信息。主要是layer申请的帧数据内存;
5、hwcomopser的如果实现dump接口也能知道hwcomposer的一些参数;
6、gralloc的内存分配信息。如果gralloc有实现dump接口的话;
7、合成方式、BufferLayer的树形结构信息
连接DP 然后继续dump SurfaceFlinger信息
连接之前启动: adb shell dumpsys SurfaceFlinger --file --no-limit
断开后再次执行 adb shell dumpsys SurfaceFlinger --file --no-limit
并pull出来 adb pull /data/misc/wmtrace/dumpsys.txt
GPU帧渲染数据¶
adb shell dumpsys gfxinfo
例如查看camera功能的渲染一帧所经过的各个阶段的耗时情况(单位毫秒)
dumpsys gfxinfo **.camera
带上 framestats 参数可以获取最近的 120 帧数据:
adb shell dumpsys gfxinfo **.camera framestats
高级命令¶
启用/禁用 SELinux¶
-
禁用
-
启用
启用/禁用 dm_verity¶
-
禁用
-
启用
启用/禁用 hidden api¶
-
禁用
-
启用
可以访问 hide api
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
Android binary XML¶
Android12之后,引入一种自定义的写XML的协议,这样的二进制文件叫二进制XML。 如果我们直接 cat /data/system/packages.xml ,显示出来的是乱码的,需要使用 abx2xml 工具进行转换。
fastboot¶
gsi¶
只刷Android上层,不包含vendor部分。 qssi同样适用。
adb reboot fastboot
fastboot flash system system.img
fastboot flash system_ext system_ext.img
fastboot flash product product.img
fastboot flash vbmeta_system vbmeta_system.img
fastboot -w
fastboot reboot