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

基本指令

  1. 查看 adb​ 版本。
adb version
  1. 查看帮助文档。
adb help

设备管理

  1. 查看已连接设备。
adb devices [-l]

-l​ :详细信息。

  1. 查看设备Android版本号。
adb shell getprop ro.build.version.release
  1. 查看设备型号。
adb shell getprop ro.product.model
  1. 查看设备序列号。
adb get-serialno
  1. 连接指定远程设备。
adb connect <IP:port>
  1. 断开远程设备。
adb disconnect [IP:port]

省略 [IP:port]​ 则断开所有。

  1. 查看连接状态。
adb get-state
  1. 关闭 adb​ 服务。
adb kill-server
  1. 启动 adb​ 服务。
adb [-p <port>] start-server

[-p <port>]​ :指定端口。

  1. 重启设备。
adb reboot [bootloader]

[bootloader]​ :引导加载程序(Bootloader)模式

  1. 进入 shell​ 环境。
adb shell
  1. 获取设备分区。
adb shell df
  1. 获取设备分辨率。
adb shell wm size
  1. 修改设备分辨率。
adb shell wm size 1080x1920
  1. 恢复默认分辨率。
adb shell wm size reset
  1. 获取设备密度。
adb shell wm density

文件传输

  1. 上传文件。
adb push <local> <remote>
  1. 拉取文件。
adb pull <remote> <local>

应用装卸

  1. 安装应用。
adb install [-r|-d|-g|-s|-f|-t] <apk_path>

-r​ :覆盖安装。

-d​ :降级安装。

-g​ :授权安装。

-s​ :安装到SD卡。

-f​ :强制安装。

-t​ :安装测试版APK。

  1. 卸载应用。
adb uninstall [-k] <package_name>

-k​ :保留数据和缓存。

包管理

  1. 查看设备已安装的包。
adb shell pm list packages [-s|-3|-d|-f|-i]

-s​ :系统应用。

-3​ :第三方应用。

-d​ :已禁用的应用。

-f​ :应用及文件路径。

-i​ :应用及安装来源。

  1. 安装应用。
adb shell pm install [-r|-d|-g|-s|-f|-t] <apk_path>
  1. 卸载应用。
adb shell pm uninstall [-k] <package_name>
  1. 禁用应用。
adb shell pm disable-user <package_name>
  1. 启用应用。
adb shell pm enable <package_name>
  1. 清除应用数据。
adb shell pm clear <package_name>
  1. 授权应用。
adb shell pm grant <package_name> android.permission.<permission_name>
  1. 撤销授权。
adb shell pm revoke <package_name> android.permission.<permission_name>
  1. 获取当前应用安装位置。
adb shell pm get-install-location
  1. 设置安装位置。
adb shell pm set-install-location 0

0​ :自动选择安装位置。

1​ :安装到内部存储。

2​ :安装到外部存储(SD 卡)。

  1. 列出设备支持的特性。
adb shell pm list features
  1. 列出指定应用的 dump 信息。
adb shell pm dump <package_name>
  1. 列出对应包名的 .apk 位置。
adb shell pm path <package_name>

日志

  1. 查看日志。
adb logcat [*:E] [> loacal/fileName]

优先级(V​, D​, I​, W​, E​, F​)分别表示 详细、调试、信息、警告、错误、致命错误。

[> loacal/fileName]​ :可以重定向到本地。

截图录制

  1. 截图。
adb shell screencap -p <remote/fileName.png>
  1. 录制。
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 查看当前输入法和状态信息。

常用的电池操作:

  1. 设置电量百分比。
adb shell dumpsys battery set level 50
  1. 设置电池的状态。
adb shell dumpsys battery set status 1
  1. 正处在放电。

  2. 正在充电。

  3. 没插充电器。

  4. 不充电。

  5. 电池充满。

  1. 设置电池的健康状态。
adb shell dumpsys battery set health 2
  1. 设置电池充电方式。
adb shell dumpsys battery set plugged 1
  1. 设置电池电压(单位:mV)。
adb shell dumpsys battery set voltage 4200
  1. 设置电池温度(单位:摄氏度)。
adb shell dumpsys battery set temperature 35
  1. 设置电池的电流(单位: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 开始跟踪应用执行过程(实验性)。
  1. 启动一个 Activity。
adb shell am start -n <package_name>/<activity_name>

-n​ :指定包名和活动名。

-a​ :指定 Action。

-c​ :指定 Category。

-d​ :指定 Data URI。

-t​ :指定 MIME 类型。

--es​ :传递字符串数据(key-value)。

  1. 停止一个应用。
adb shell am force-stop <package_name>
  1. 启动一个服务。
adb shell am startservice -n <package_name>/<service_name>
  1. 停止一个服务。
adb shell am stopservice -n <package_name>/<service_name>
  1. 发送一个广播。
adb shell am broadcast -a <action> [options]

-a​ :指定广播 Action。

-c​ :指定 Category。

-d​ :指定 Data URI。

--es​ :传递字符串数据。

  1. 测试 Intent。
adb shell am start -W <intent>
  1. 杀死后台进程。
adb shell am kill <package_name>
  1. 重置包的任务状态。
adb shell am kill-all
  1. 执行性能测试。
adb shell am profile start <file> <package_name>

adb shell am profile stop <package_name>

start​ :开始对指定包进行性能分析,将结果输出到文件。

stop​ :停止性能分析。

  1. 打印调试日志。
adb shell am stack list

压力测试

adb shell monkey [options] <event-count>

<event-count>​ :指定 Monkey 测试要执行的事件数。

  1. 基本参数:
参数 说明 示例
-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 随机化事件之间的延迟时间。
  1. 事件百分比:

事件的编码会根据版本不同而有所差异。

编码 参数 说明
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 设置其他随机事件的百分比,通常为无法分类的事件。
  1. 调试和日志参数:
参数 说明 示例
-v 设置日志输出详细级别,可用级别:-v​,-v-v​,-v-v-v​。 -v-v-v
--dbg-no-events 仅打印事件日志,不执行实际事件(调试模式)。
--hprof 在事件序列之后生成堆转储文件。
  1. 特定应用测试:
参数 说明 示例
--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'