本博客记录一些常用命令,用于日常开发,问题分析,log分析等。
一般在开发Android应用,比较少去关系系统日志,最多过滤一下自己应用的日志,看一下生命周期和报错日志之类的,可一旦开发的应用涉及到系统侧,日志抓取和分析就必不可少了。
工欲善其事,必先利其器。掌握这些adb命令,必能事半功倍!
日志管理logcat
1、抓取logcat输出到文件
adb logcat > log0801.txt
获取运行时数据的dumpsys命令
//------------------------------dumpsys 服务名---------------------------------
2、dump ams所有的信息数据
adb shell dumpsys activity > ams0801.txt
3、dump activity任务栈
adb shell dumpsys activity activities > activities.txt
4、dump services信息
adb shell dumpsys activity services
5、dump provides信息
adb shell dumpsys activity providers > providers.txt
6、dump broadcast信息
adb shell dumpsys activity broadcasts > broadcast.txt
7、dump intent信息
adb shell dumpsys activity intents > intent.txt
8、dump process信息
adb shell dumpsys activity processed > processes.txt
9、dump window信息
adb shell dumpsys window > window0801.txt
10、dump location信息
adb shell dumpsys location > location.txt
11、dump cpu使用情况信息
adb shell dumpsys cpuinfo > cpuinfo.txt
12、dump 电池信息
adb shell dumpsys battery > battery.txt
13、dump surface flinger 查看图层layer
adb shell dumpsys SurfaceFlinger > surface.txt
14、dump 进程的内存信息
adb shell dumpsys meminfo com.xx.xx > meminfo.txt
15、网络信息查询
网络连接 adb shell dumpsys connectivity
网络策略 adb shell dumpsys netpolicy
网络状态adb shell dumpsys netstats
网络管理adb shell dumpsys network_management
16、查看当前任务栈
adb shell dumpsys activity | findstr mResumedActivity > resumedActivity.txt
17、查看系统支持的dump 服务
adb shell dumpsys -l
adb shell service list
18、dump 具体广播的信息
// 查看广播
adb shell dumpsys activity -b| grep APPWIDGET_ENABLED -C10
包管理pm命令
//-----------------------pm
1、清空指定应用的缓存
adb shell pm clear com.xx.xx
2、查看应用安装目录
adb shell pm path com.xx.xx
3、 启用组件 adb shell pm disable/enable <PACKAGE_OR_COMPONENT>
adb shell pm enable com.test/.MainActivity
// 禁用组件
adb shell pm disable com.test/.MainActivity
//强制卸载 testApk
adb shell pm uninstall -k --user 0 com.testApk
4、查看所有已安装的软件包
adb shell pm list packages
adb shell pm list packages com.test //包含com.test的软件包
5、查看所有第三方应用,非系统自带
adb shell pm list packages -3
6、查看所有被禁用的包
adb shell pm list packages -d
7、授权权限
// 给软件包授予写外部存储器的权限
pm grant com.example.app android.permission.WRITE_EXTERNAL_STORAGE
8、取消权限
// 撤回软件包读写外部存储器的权限
pm revoke com.example.app android.permission.READ_EXTERNAL_STORAGE
4、dump 界面视图信息
dump视图层级
adb shell uiautomator dump sdcard/ui-tree.xml
5、adb截图/录制视频
adb 截图
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png D:/desktop
adb 录屏
screenrecord [options] <save_file>
// 录制屏幕, 指定录制宽高为 720x1280, 比特率为 4Mbps, 录制 30 秒
screenrecord --size 720x1280 --bit-rate 4000000 --time-limit 30 /sdcard/test.mp4
options参数:
--help # 输出帮助信息
--size # 录制的尺寸, 宽x高, 默认值是设备屏幕的原生分辨率(如果支持),
# 如果不支持, 则使用 1280x720。
--bit-rate # 设置录制视频的比特率(bit/s), 比特率越高视频质量越高,
# 但文件存储也会变大。例如设置为 4Mbps: --bit-rate 4000000
--time-limit # 设置最大录制时长(单位为秒), 默认值和最大值均为 180(3分钟)
--verbose # 录制时显示日志信息
6、Activity管理器的am命令
1、 杀掉应用,并重启应用
adb shell am force-stop com.test
adb shell am start -n com.test/.MainActivity
// 终止进程
adb shell am kill com.test
//终止所有进程
adb kill-all
2、 持续监听 app
adb shell am monitor
3、启动Activity
am start <intent>
intent 参数:
-n // component, intent 组件, 格式为: "包名/组件名", 例如 "com.test/.TestActivity"
-a // action, intent 动作, 例如 "android.intent.action.VIEW"
-c // category, intent 类别, 例如 "android.intent.category.BROWSABLE"
-f // flags, 和 intent.setFlags(int) 方法相同
-d // data_uri, intent 数据URI, 例如 "file:///mnt/sdcard/aa.png"
-t // mime_type, intent MIME类型, 例如 "image/png"
-e // 和 --es 相同
--esn // 添加 null extra, 格式: --esn extra_key
--es // 添加 string extra, 格式: --es extra_key string_value
--ei // 添加 int extra, 格式: --ei extra_key int_value
--el // 添加 long extra, 格式: --el extra_key long_value
--ef // 添加 float extra, 格式: --ef extra_key float_value
--ez // 添加 boolean extra, 格式: --ez extra_key boolean_value
--eu // 添加 uri extra, 格式: --es extra_key uri_value
// 让手机默认浏览器打开一个网页
am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d https://www.baidu.com
// 打开电话拨号盘
am start -a android.intent.action.DIAL -d tel:1008611
//打电话
am start -a android.intent.action.CALL -d tel:1008611
// 打开微信, 微信(v6.7.3)的主入口 Activity 为 com.tencent.mm.ui.LauncherUI
am start -n com.tencent.mm/.ui.LauncherUI
// 打开微信(完整的启动 APP 命令)
am start -n com.tencent.mm/.ui.LauncherUI -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
3、启动服务
adb shell am startservice -n com.test/.TestService
4、发送广播
adb shell am broadcast -a com.test.home_action
7、dump window的动画/界面转换
1、
// Tracing Window Transitions
开始前输入:
adb shell cmd window tracing start
复现后输入:
adb shell cmd window tracing stop
把文件pull出来:
adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope
2、抓surfaceflinger的状态
adb shell su root service call SurfaceFlinger 1020 i32 1
adb shell su root service call SurfaceFlinger 1020 i32 0
adb pull /data/misc/wmtrace/transaction_trace.winscope
8、调用Android系统bugreport
// adb bugreport
adb bugreport > bugreport.txt
// 高版本直接生成zip
adb bugreport
9、安装卸载apk
adb install <options> <路径>
options参数:
-r 替换安装包,保留数据
-d 允许版本降级(只限debug包)
-g 授予所有运行权限
adb uninstall <options> <packagename>
options参数:
-k 保留数据和缓存目录
10、获取device信息 getprop
getprop # 列出所有属性信息
getprop ro.product.manufacturer # 获取设备的厂商, 例如: HUAWEI
getprop ro.product.brand # 获取设备的商标, 例如: HUAWEI
getprop ro.product.model # 获取设备的型号, 例如: BLA-AL00
getprop ro.build.version.release # 获取设备的 Android 版本, 例如: 8.1.0
getprop ro.build.version.sdk # 获取设备的 SDK Version, 例如: 27
getprop ro.boot.serialno # 获取设备的序列号, 例如: 8FE0917B20005668
getprop ro.board.platform # 获取设备的 CUP 平台, 例如: kirin970
getprop dalvik.vm.heapstartsize # 虚拟机进程的分配的初始堆内存大小
getprop dalvik.vm.heapgrowthlimit # 虚拟机进程的堆内存增长极限大小
getprop dalvik.vm.heapsize # 虚拟机进程的堆内存大小
11、monkey脚本/自动化测试/压测
// monkey <options> <count>
// 1、python脚本
python perfsense.py --monkey "monkey -p com.testapk --pct-touch 30 --throttle 1000 -s 200 --pct-syskeys 0 --ignore-crashes --ignore-timeouts -v -v -v 60000 > /sdcard/monkey.txt" --jarperf "com.testapk" -t 32000
// 2、adb 命令
adb shell "monkey -p com.testapk --ignore-crashes --monitor-native-crashes --ignore-timeouts --ignore-native-crashes --pct-motion 40 --pct-touch 45 --pct-appswitch 5 --pct-nav 5 --pct-majornav 5 --pct-syskeys 0 --pct-anyevent 0 --kill-process-after-error -s 251314251314 -v-v-v --throttle 300 600000000 2>/data/local/tmp/log.txt"
adb shell monkey -p com.test --pct-syskeys -0 -v -v -v 10000
options参数:
options 参数:
-p <allowed_package> # 允许测试的软件包, 可以指定多个 -p 参数支持多个软件包
-c <main_category> # 主分类, 可以指定多个 -c 参数
--ignore-crashes # 忽略崩溃, 继续执行事件
--ignore-native-crashes # 忽略 native 崩溃, 继续执行事件
--ignore-timeouts # 忽略超时, 继续执行事件
--ignore-security-exceptions # 忽略安全异常, 继续执行事件
--monitor-native-crashes # 监控 native 崩溃
--kill-process-after-error # 发生错误时杀死进程
--hprof
--match-description <text>
--pct-touch <percent> # 触摸事件百分比, 例如指定触摸事件比例为 30%, 格式为: --pct-touch 30
--pct-motion <percent> # 手势动作事件百分比, 所有事件百分比之和不能超过 100%
--pct-trackball <percent> # 轨迹事件百分比
--pct-syskeys <percent> # 系统按键事件百分比
--pct-nav <percent> # 基本导航事件百分比
--pct-majornav <percent> # 主要导航事件百分比
--pct-appswitch <percent> # APP 切换事件百分比
--pct-flip <percent> # 弹事件百分比
--pct-anyevent <percent> # 其他事件百分比
--pct-pinchzoom <percent> # 缩放(捏)事件百分比
--pct-permission <percent> # 权限事件百分比
--pkg-blacklist-file <file> #
--pkg-whitelist-file <file> #
--wait-dbg # 如果 adb 断开, 等待 adb 连接, 直到 adb 恢复连接后继续执行 monkey
--dbg-no-events
--setup scriptfile
-f <scriptfile> # 指定用于测试的脚步文件, 可以指定多个 -f 参数
--port <port>
-s <seed> # 产生伪随机事件的种子, 相同的 -s 产生的事件流相同, 格式(可指定多个-s): -s 1
-v # 反馈信息级别, -v 越多个, 输如的日志信息越详细, 最多支持 3 个 -v
--throttle <ms> # 事件之间的间隔(单位为毫秒), 例如 200毫秒 的格式: --throttle 200
--randomize-throttle # 随机事件间隔时间
--profile-wait <ms> #
--device-sleep-time <ms> #
--randomize-script #
--script-log #
--bugreport #
--periodic-bugreport #
--permission-target-system #
网友评论