ADB
SDK 全称 Software Development Kit,是一组用于开发应用程序的工具、库、文档和示例代码的集合。
ADB 全称 Android Debug Bridge,是 Android SDK 里的一个工具,用这个工具可以直接操作管理 Android 模拟器或 Android 设备。
新版本 SDK 的可以通过 Android Developers 命令行 工具中的 sdkmanager 来管理 ADB,如同 pip
、npm
。
模拟器
各 Android 模拟器连接端口:
模拟器名称 |
端口号 |
逍遥模拟器 |
21503 |
夜神模拟器 |
62001 |
海马玩模拟器 |
26944 |
雷电模拟器 |
5555 |
腾讯手游助手 |
5555 |
蓝叠安卓模拟器 |
5555 |
安卓模拟器大师 |
54001 |
网易MUMU模拟器 |
7555 |
天天安卓模拟器 |
5037 |
基本指令
- 查看
adb
版本。
- 查看帮助文档。
设备管理
- 查看已连接设备。
-l
:详细信息。
- 查看设备Android版本号。
adb shell getprop ro.build.version.release
|
- 查看设备型号。
adb shell getprop ro.product.model
|
- 查看设备序列号。
- 连接指定远程设备。
- 断开远程设备。
省略 [IP:port]
则断开所有。
- 查看连接状态。
- 关闭
adb
服务。
- 启动
adb
服务。
adb [-p <port>] start-server
|
[-p <port>]
:指定端口。
- 重启设备。
[bootloader]
:引导加载程序(Bootloader)模式
- 进入
shell
环境。
- 获取设备分区。
- 获取设备分辨率。
- 修改设备分辨率。
adb shell wm size 1080x1920
|
- 恢复默认分辨率。
- 获取设备密度。
文件传输
- 上传文件。
adb push <local> <remote>
|
- 拉取文件。
adb pull <remote> <local>
|
应用装卸
- 安装应用。
adb install [-r|-d|-g|-s|-f|-t] <apk_path>
|
-r
:覆盖安装。
-d
:降级安装。
-g
:授权安装。
-s
:安装到SD卡。
-f
:强制安装。
-t
:安装测试版APK。
- 卸载应用。
adb uninstall [-k] <package_name>
|
-k
:保留数据和缓存。
包管理
- 查看设备已安装的包。
adb shell pm list packages [-s|-3|-d|-f|-i]
|
-s
:系统应用。
-3
:第三方应用。
-d
:已禁用的应用。
-f
:应用及文件路径。
-i
:应用及安装来源。
- 安装应用。
adb shell pm install [-r|-d|-g|-s|-f|-t] <apk_path>
|
- 卸载应用。
adb shell pm uninstall [-k] <package_name>
|
- 禁用应用。
adb shell pm disable-user <package_name>
|
- 启用应用。
adb shell pm enable <package_name>
|
- 清除应用数据。
adb shell pm clear <package_name>
|
- 授权应用。
adb shell pm grant <package_name> android.permission.<permission_name>
|
- 撤销授权。
adb shell pm revoke <package_name> android.permission.<permission_name>
|
- 获取当前应用安装位置。
adb shell pm get-install-location
|
- 设置安装位置。
adb shell pm set-install-location 0
|
0
:自动选择安装位置。
1
:安装到内部存储。
2
:安装到外部存储(SD 卡)。
- 列出设备支持的特性。
adb shell pm list features
|
- 列出指定应用的 dump 信息。
adb shell pm dump <package_name>
|
- 列出对应包名的 .apk 位置。
adb shell pm path <package_name>
|
日志
- 查看日志。
adb logcat [*:E] [> loacal/fileName]
|
优先级(V
, D
, I
, W
, E
, F
)分别表示 详细、调试、信息、警告、错误、致命错误。
[> loacal/fileName]
:可以重定向到本地。
截图录制
- 截图。
adb shell screencap -p <remote/fileName.png>
|
- 录制。
adb shell screenrecord <remote/fileName.mp4>
|
服务管理
adb shell dumpsys [serverName]
|
serverName:
服务名称 |
功能说明 |
activity |
获取活动管理器信息,包括活动栈、任务信息、当前 Activity 等。 |
battery /batterystats |
查看电池状态,包括电量、温度、充电状态等。 |
cpuinfo |
查看设备当前 CPU 使用情况。 |
meminfo |
查看内存使用情况,可指定应用查看内存分布。 |
gfxinfo |
获取图形渲染相关信息,分析帧率和 UI 性能。 |
window |
获取窗口和显示信息,包括当前窗口层次结构和顶部窗口。 |
package |
查看包管理器信息,包括已安装应用的权限、路径等。 |
power |
查看设备电源状态及唤醒锁信息。 |
netstats |
查看设备的网络连接状态、流量统计等详细信息 |
connectivity |
显示网络连接状态,包括 Wi-Fi、移动数据、VPN 等信息。 |
input |
查看输入设备信息和输入法状态。 |
audio |
获取音频服务信息,包括当前音量、播放状态等。 |
media.audio_flinger |
查看音频流信息,用于音频问题的调试。 |
diskstats |
查看磁盘使用状态和读写操作统计信息。 |
network_management |
获取网络管理相关的信息,如接口、流量统计等。 |
alarm |
查看设备上的定时器和唤醒源。 |
sensorservice |
查看设备传感器信息,如加速度计、陀螺仪等状态。 |
usagestats |
查看应用使用统计信息。 |
notifications |
获取通知服务信息,包括当前显示的通知。 |
procstats |
查看进程统计信息,分析应用资源消耗情况。 |
input_method |
查看当前输入法和状态信息。 |
常用的电池操作:
- 设置电量百分比。
adb shell dumpsys battery set level 50
|
- 设置电池的状态。
adb shell dumpsys battery set status 1
|
-
正处在放电。
-
正在充电。
-
没插充电器。
-
不充电。
-
电池充满。
- 设置电池的健康状态。
adb shell dumpsys battery set health 2
|
- 设置电池充电方式。
adb shell dumpsys battery set plugged 1
|
- 设置电池电压(单位:mV)。
adb shell dumpsys battery set voltage 4200
|
- 设置电池温度(单位:摄氏度)。
adb shell dumpsys battery set temperature 35
|
- 设置电池的电流(单位:mA)。
adb shell dumpsys battery set current_now -500
|
活动管理
adb shell am <subcommand> [options]
|
subcommand:
子命令 |
功能说明 |
start |
启动一个 Activity。 |
force-stop |
强制停止一个应用。 |
startservice |
启动一个服务。 |
stopservice |
停止一个服务。 |
broadcast |
发送一个广播。 |
kill |
杀死指定应用的后台进程。 |
kill-all |
杀死所有后台任务。 |
stack |
查看任务栈信息。 |
profile |
执行性能测试,生成分析文件。 |
start-tracing |
开始跟踪应用执行过程(实验性)。 |
- 启动一个 Activity。
adb shell am start -n <package_name>/<activity_name>
|
-n
:指定包名和活动名。
-a
:指定 Action。
-c
:指定 Category。
-d
:指定 Data URI。
-t
:指定 MIME 类型。
--es
:传递字符串数据(key-value)。
- 停止一个应用。
adb shell am force-stop <package_name>
|
- 启动一个服务。
adb shell am startservice -n <package_name>/<service_name>
|
- 停止一个服务。
adb shell am stopservice -n <package_name>/<service_name>
|
- 发送一个广播。
adb shell am broadcast -a <action> [options]
|
-a
:指定广播 Action。
-c
:指定 Category。
-d
:指定 Data URI。
--es
:传递字符串数据。
- 测试 Intent。
adb shell am start -W <intent>
|
- 杀死后台进程。
adb shell am kill <package_name>
|
- 重置包的任务状态。
- 执行性能测试。
adb shell am profile start <file> <package_name>
adb shell am profile stop <package_name>
|
start
:开始对指定包进行性能分析,将结果输出到文件。
stop
:停止性能分析。
- 打印调试日志。
压力测试
adb shell monkey [options] <event-count>
|
<event-count>
:指定 Monkey 测试要执行的事件数。
- 基本参数:
参数 |
说明 |
示例 |
-p <package> |
指定要测试的应用程序包名,限制事件只针对该应用。 |
-p com.example.app |
-s <sCount> |
指定种子数 |
-s100 |
--ignore-crashes |
忽略应用崩溃错误,继续运行测试。 |
|
--ignore-timeouts |
忽略应用无响应(ANR)错误,继续运行测试。 |
|
--ignore-security-exceptions |
忽略权限错误,继续运行测试。 |
|
--monitor-native-crashes |
监控并报告本地代码崩溃错误。 |
|
--throttle <milliseconds> |
设置事件之间的延迟(毫秒),默认没有延迟。 |
--throttle 500 |
--randomize-throttle |
随机化事件之间的延迟时间。 |
|
- 事件百分比:
事件的编码会根据版本不同而有所差异。
编码 |
参数 |
说明 |
0 |
--pct-touch |
设置触摸事件的百分比(单点触摸,如点击)。 |
1 |
--pct-motion |
设置滑动事件的百分比(如滑动手势)。 |
2 |
--pct-pinchzoom |
设置缩放事件的百分比(如双指缩放手势)。 |
3 |
--pct-trackball |
设置轨迹球事件的百分比(模拟早期设备,现代设备中较少使用)。 |
4 |
--pct-rotation |
屏幕旋转事件百分比(横屏、竖屏)。 |
5 |
--pct-permission |
设置权限对话框的交互事件百分比(如点击“允许”或“拒绝”按钮)。 |
6 |
--pct-nav |
设置“基本导航”事件的百分比(方向键、返回键等操作)。 |
7 |
--pct-majornav |
设置“主导航”事件的百分比(如 Home 键、菜单键等)。 |
8 |
--pct-syskeys |
设置系统按键事件的百分比(如音量键、电源键等)。 |
9 |
--pct-appswitch |
设置应用切换事件的百分比(如切换到最近任务列表)。 |
10 |
--pct-flip |
设置屏幕翻转事件的百分比(模拟设备旋转方向)。 |
11 |
--pct-anyevent |
设置其他随机事件的百分比,通常为无法分类的事件。 |
- 调试和日志参数:
参数 |
说明 |
示例 |
-v |
设置日志输出详细级别,可用级别:-v ,-v-v ,-v-v-v 。 |
-v-v-v |
--dbg-no-events |
仅打印事件日志,不执行实际事件(调试模式)。 |
|
--hprof |
在事件序列之后生成堆转储文件。 |
|
- 特定应用测试:
参数 |
说明 |
示例 |
--kill-process-after-error |
遇到错误时终止进程。 |
|
--wait-dbg |
在启动测试之前等待调试器连接。 |
|
--script-log |
将事件脚本日志保存到文件中。 |
--script-log /sdcard/monkey.log |
AAPT
Android SDK 中 aapt 工具(Android Asset Packaging Tool)的一部分,主要用于查看 APK 文件的元数据。
aapt d badging <apk_file> | findstr "keyName"
|
输出一下:
package: name='com.example.app' versionCode='1' versionName='1.0.0' platformBuildVersionName='11' sdkVersion:'16' targetSdkVersion:'30' uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.ACCESS_FINE_LOCATION' application-label:'My App' application-icon: res/drawable-mdpi-v4/ic_launcher.png launchable: activity name='com.example.app.MainActivity' label='My App' supports-screens: 'small' 'normal' 'large' 'xlarge'
|