ADB 命令速查手册
适用环境:Android 车机调试(展锐 uis7870 / 中汽 zqautomotive / 赛力斯 Seres),Windows 为主。 Windows 下用
findstr代替 Linux 的grep;PowerShell 下可用Select-String。
目录
- 一、基础设备管理
- 二、无线连接
- 三、应用管理
- 四、进程 / 前台窗口
- 五、系统信息
- 六、CPU / 内存监控
- 七、屏幕与显示
- 八、深色 / 黑白模式
- 九、音量控制
- 十、权限管理
- 十一、电池模拟
- 十二、SELinux / Root / Remount
- 十三、Fastboot 解锁流程
- 十四、串口调试
- 十五、文件传输
- 十六、SystemUI 推包地址
- 十七、日志抓取
- 十八、性能追踪(systrace / perfetto)
- 十九、Monkey 压力测试
- 二十、模块单编
- 二十一、APK 系统签名
- 二十二、Git 常用命令
- 二十三、find 文件查找
- 二十四、Android Studio 快捷键
- 二十五、常用路径记录
一、基础设备管理
# 查看已连接设备
adb devices
# 以 root 身份重启 adbd
adb root
# 重新挂载系统分区为可读写
adb remount
# 重启设备
adb reboot
二、无线连接
# 让设备在 5555 端口开启无线 adb
adb tcpip 5555
# 连接设备(IP 换成实际地址)
adb connect 12.8.1.151
三、应用管理
启动应用 / Activity
# 打开系统原生设置
adb shell am start -a android.settings.SETTINGS
# 直接打开指定应用的某个 Activity
adb shell am start -n com.zqautomotive.settings/.MainActivity
# 查询应用的可启动 Activity(启动类)
adb shell cmd package resolve-activity --brief com.android.gallery3d
停止 / 杀死应用
# 强制停止应用(相当于设置里"强行停止")
adb shell am force-stop com.seres.settings
# 按进程名杀死进程(systemui 等系统进程也适用)
adb shell pkill systemui
# 按 pid 杀死进程(pid 见下方进程查询)
adb shell kill <pid>
# 干掉 SystemUI(需要 root)
adb shell su -c "killall com.android.systemui"
查看应用进程
# 根据包名查看进程(Linux/macOS)
adb shell ps | grep com.seres.settings
# Windows 写法
adb shell ps | findstr com.zqautomotive.launcher
# 列出与关键字相关的所有进程
adb shell ps -A | findstr zq
# 进入 shell 后查看全部进程
adb shell
ps -A
包管理
# 列出所有已安装应用,按关键词过滤
adb shell pm list packages | grep <关键词>
# 带 APK 路径查找应用(可定位到具体文件)
adb shell pm list packages -f | grep <关键词>
# 查看某个包的安装路径
adb shell pm path com.android.car.settings
# 清除应用数据(停止应用并清空缓存/数据,相当于彻底重置)
adb shell pm clear <包名>
# 示例:清除王者荣耀数据
adb shell pm clear com.tencent.tmgp.sgame
安装 / 卸载
# 安装 APK
# -d 允许降级安装;-r 覆盖安装;-t 允许安装测试包
adb install -t xx.apk
# 批量安装当前目录下所有 APK(Windows cmd)
for %f in (*.apk) do adb install "%f"
四、进程 / 前台窗口
# 当前聚焦的 Activity
adb shell dumpsys activity | grep "mFocus"
# 栈顶 Activity(车机上更常用,可拿到真实前台包名/Activity)
adb shell dumpsys activity activities | grep -E 'mResumedActivity|topResumedActivity|topActivity'
# 当前前台窗口(注意:mCurrentFocus 有时返回的是 Window 而非包名)
adb shell dumpsys window | grep -E 'mCurrentFocus' | cut -d '/' -f 1
# Windows 查看栈顶窗口
adb shell dumpsys window | findstr mCurrentFocus
五、系统信息
# 设备全部构建信息
adb shell getprop | grep build
# 或直接读 build.prop
adb shell cat /system/build.prop
# 系统版本描述
adb shell getprop ro.build.description
# 硬件版本
adb shell getprop ro.mfg.hw.version
# 存储空间使用情况
adb shell df -h
# 整机内存信息(需 root)
adb shell cat /proc/meminfo
六、CPU / 内存监控
# 查看某个应用的内存占用
adb shell dumpsys meminfo com.android.systemui
# 系统全局内存摘要
adb shell dumpsys meminfo
# 只看应用内存概要,快速浏览
adb shell dumpsys meminfo -s
# 所有进程 CPU 使用时间、百分比及系统总负载
adb shell dumpsys cpuinfo
# 实时进程列表,按 CPU 占用排序(-s cpu),显示前 5 个(-m 5)
adb shell top -m 5 -s cpu
# 交互式查看进程(进入后可按键操作)
adb shell top
adb shell top -h # 查看 top 帮助
七、屏幕与显示
分辨率 / DPI
# 查看当前(逻辑)分辨率
adb shell wm size
# 设置分辨率(宽 x 高),如改为竖屏分辨率
adb shell wm size 1080x1920
# 恢复默认分辨率
adb shell wm size reset
# 查看物理分辨率
adb shell wm physicalsize
# 设置 / 重置 DPI
adb shell wm density 480
adb shell wm density reset
注意:
wm size设置的是逻辑分辨率,内容会缩放;wm density设置的是 DPI,影响 UI 元素大小。
多屏信息
# 查看所有屏幕信息(通过 mDisplayId= 字段确认屏幕 ID)
adb shell dumpsys display
# 快速提取所有屏幕 ID 列表
adb shell dumpsys display | grep "mDisplayId=" | awk '{print $1}' | cut -d= -f2 | sort -u
屏幕旋转
# 设置屏幕旋转方向
adb shell settings put system user_rotation 3
# 恢复自动旋转
adb shell settings put system accelerometer_rotation 1
| 值 | 含义 |
|---|---|
| 0 | 0° |
| 1 | 90° |
| 2 | 180° |
| 3 | 270°(逆时针) |
八、深色 / 黑白模式
# 切换深色模式(黑)
adb shell cmd uimode night yes
# 切换浅色模式(白)
adb shell cmd uimode night no
# 方式二:直接写设置(2=深色 / 1=浅色 / -1=自动)
adb shell settings put secure ui_night_mode 2 # 黑夜
adb shell settings put secure ui_night_mode 1 # 白天
adb shell settings put secure ui_night_mode -1 # 自动(设为自动后 cmd uimode 才生效)
# 查看当前模式
adb shell dumpsys uimode
九、音量控制
# 媒体音量 +
adb shell input keyevent KEYCODE_VOLUME_UP
# 媒体音量 -
adb shell input keyevent KEYCODE_VOLUME_DOWN
十、权限管理
# 查询应用申请了哪些权限及授权情况
adb shell dumpsys package com.zq.systemui | findstr "requested permissions:", "granted="
# PowerShell 写法
adb shell dumpsys package com.zq.systemui | Select-String "requested permissions:", "granted="
adb shell dumpsys package com.android.systemui | Select-String "requested permissions:", "granted=", "CAR_VENDOR_EXTENSION"
# 精确查某个权限是否授予
adb shell dumpsys package com.zq.systemui | grep android.car.permission.CAR_VENDOR_EXTENSION
# 运行时授权(授予应用某个权限)
adb shell pm grant com.zq.systemui android.car.permission.CAR_VENDOR_EXTENSION
系统白名单权限路径(放置权限 xml,如
com.android.systemui.xml):system_ext/etc/permissions查找权限 xml 文件:
adb shell find /system_ext -name com.android.systemui.xml # 结果示例:/system_ext/etc/permissions/com.android.systemui.xml
十一、电池模拟
# 把系统电池电量设为 100%(便于模拟满电状态)
adb shell dumpsys battery set level 100
# 恢复真实电池
adb shell dumpsys battery reset
十二、SELinux / Root / Remount
# 关闭 SELinux(临时,需 root)
adb shell
$ su # 直接 setenforce 0 会报 Permission denied,需先 su
# setenforce 0
实测记录:普通 shell 下执行
setenforce 0返回Couldn't set enforcing status to '0': Permission denied,su提权后即可成功。
十三、Fastboot 解锁流程
目的:解锁 / 重新挂载(remount)system 等分区,便于 push 修改系统镜像。
# 1. 执行 unlock1.bat 解锁脚本
# 2. 短路进入 fastboot 模式
# 3. 新开窗口执行:
fastboot devices
fastboot reboot
# 4. 设备重启后确认已识别
adb devices
# 5. root 并 remount
adb root
adb remount
# 预期输出:Disabling verity for /system /system_ext /vendor /odm /product ...
# Using overlayfs for ... / Now reboot your device for settings to take effect
# 6. 按提示重启,使 verity 关闭 / overlayfs 生效
adb reboot
十四、串口调试
串口接线
| 板子 | 另一端 |
|---|---|
| TXD | RX |
| RXD | TX |
| GND | GND |
通过串口打开 adb(切到 ADB 模式)
# 1. 先执行 su
su
# 2. 将 extcon 切到 device/ADB 模式
echo 1 > /sys/devices/platform/extcon-virt/id_virt
echo 1 > /sys/devices/platform/extcon-virt/vbus_virt
# 3. 换 adb 接口线连接查看
adb devices
改回 USB 模式
echo 0 > /sys/devices/platform/extcon-virt/id_virt
echo 0 > /sys/devices/platform/extcon-virt/vbus_virt
Muble 串口参数
- 路径:Session -> Serial
- serial port:
COM70 - Speed:
921600
其他
- 切换 device 密码(拨号界面输入):
*#*#83781#*#*
十五、文件传输
# 推送文件/目录到设备(示例:360 环视数据包)
adb push 3603D /sdcard
# 写入完成后同步(保险起见)
adb shell sync
# 拉取设备文件到本地(示例:拉取 ylog)
adb shell
cd data/ylog/ap
adb pull 011-0704_151021--0704_151057.ylog .
# 直接拉取整个日志目录
adb pull /data/ylog/ap
# 拷贝文件(Git Bash / MSYS 环境示例)
cp make_build.sh /s/ci/hedong/code
十六、SystemUI 推包地址
# SystemUI APK 安装路径
/system_ext/priv-app/SeresSystemUI/SeresSystemUI.apk
# SystemUI 权限 xml 文件路径
/system_ext/etc/permissions/com.android.systemui.xml
十七、日志抓取
# 崩溃日志(Java 异常)
adb logcat | grep "AndroidRuntime"
# 实时监控系统启动过程中的严重错误
adb logcat -b all | grep -E "AndroidRuntime|SystemServer|PackageManager|PrivappPermission"
# 只输出指定 tag 的日志并写入文件(其他 tag 静默)
# 格式:adb logcat -v time <Tag>:* *:s > 输出文件
adb logcat -v time AutoVoice:* *:s > log_AutoVoice.txt
十八、性能追踪(systrace / perfetto)
# 抓取 15 秒 perfetto trace(含 sched/freq/idle/am/wm/gfx/view/input/binder 等核心事件)
adb shell perfetto -o /data/misc/perfetto-traces/android_trace.perfetto-trace -t 15s -b 64mb -a "*" sched freq idle am wm gfx view input binder_driver hal dalvik
在浏览器中打开 trace 分析:
十九、Monkey 压力测试
# 对指定包随机发送 100 万次事件做压力测试
adb shell monkey -p com.zqautomotive.settings 1000000
二十、模块单编
# 1. 进入产物目录,删除该模块之前编译的生成物
# 产物根路径:out/target/product/uis7870_2h10_ca(按实际机型)
# 2. 查找生成物
find . -name VwCopilotLauncher*
# 3. 删除该目录下所有文件
rm -rf *
# 4. 初始化编译环境并单编模块
source build/envsetup.sh
lunch 102 # 102 为对应机型 lunch 编号
make VwCopilotLauncher
# 查看当前在哪个 lunch 上
source build/envsetup.sh
lunch # 不带参数会列出并提示选择
二十一、APK 系统签名
# 通用格式
apksigner sign --ks <your_keystore.jks> --ks-key-alias <alias> \
--ks-pass pass:<password> --key-pass pass:<key_password> <input.apk>
# 示例:用 platform 平台签名(360 / 系统应用常用)
apksigner sign --ks platform.jks --ks-key-alias platform \
--ks-pass pass:platform --key-pass pass:platform <input.apk>
二十二、Git 常用命令
分支与远端
# 查看远端仓库地址
git remote -v
# 查看本地分支与远端跟踪关系
git branch -vv
# 基于远端分支新建本地分支并跟踪(旧写法)
git checkout -b VW_CoPilot origin/master
# Git 2.23+ 推荐写法
git switch -c iat origin/iat
丢弃修改
# 丢弃工作区未暂存(未 git add)的修改
git checkout -- .
# 或更现代的命令
git restore .
# 回退最近 1 次提交,保留代码修改(回到暂存区)
git reset --soft HEAD^
# 彻底丢弃最近 1 次提交及其修改
git reset --hard HEAD~1
# 丢弃本地所有修改,完全对齐远端分支
git reset --hard origin/VW_Copilot_factory
# 撤销合并提交(HEAD 为合并提交时,回到合并前)
git reset --hard HEAD~1
# 中断进行中的 rebase,回到之前状态
git rebase --abort
同步代码
# 常规同步
git checkout vw_ivi
git pull origin vw_ivi
# 提交前先 rebase 远端最新代码
git pull --rebase origin vw_ivi
# 删除本地分支(-D 强制删除)
git branch -D local
# 删除坏掉的仓库目录并重新单独同步(repo 环境)
rm -rf vendor/vwcopilot/app/a7870
repo sync -c --no-tags vendor/vwcopilot/app/a7870
提交流程(rebase + 推送)
# 1. 确认在正确的本地分支
git checkout vw_ivi
# 2. 抓取远端最新动态(不合并)
git fetch origin
# 3. 把本地提交变基到远端分支最前端
git rebase origin/vw_ivi
# 4. 确认本地领先的提交
git log origin/vw_ivi..vw_ivi --oneline
# 5. 重新推送(gerrit 评审流)
git push origin refs/heads/vw_ivi:refs/for/vw_ivi
git push origin HEAD:refs/for/main
git push origin HEAD:refs/for/iat
小贴士:如果本地产生了多余合并提交,可改用
git pull --rebase代替git pull(用 rebase 代替 merge),避免合并提交。
Cherry-pick 指定提交
# 区间 cherry-pick(如从 a1b2c3d 连续到 e5f6g7h)
git cherry-pick a1b2c3d^..e5f6g7h
# 依次拼接多笔不连续的 Commit
git cherry-pick 9c8f17c 2031ce0 4d381b8
合并 / 压缩提交(squash)
# 查看最近 5 笔提交
git log --oneline -n 5
# 本地未 push 的提交,用交互式变基合并(N 为要合并的笔数,如 HEAD~3)
git rebase -i HEAD~N
# 编辑界面中:第一行保留 pick,其余改为 squash(或简写 s)
# pick a1b2c3d 第一次提交内容
# squash e4f5g6h 第二次提交内容
# squash i7j8k9l 第三次提交内容
# 保存退出后会再弹窗合并备注信息,保留一个清晰的总述即可
查看记录 / 处理冲突
# 查看前 8 笔提交(图形化显示分支)
git log --oneline --graph --decorate -8
# 冲突/混乱时回退到最近一笔
git reset --hard HEAD~1
二十三、find 文件查找
# 当前目录及子目录查找文件(忽略大小写)
find . -iname "CarNotificationLib"
# 按精确文件名查找
find . -name "file.txt"
# 只查找目录(-type d;普通文件用 -type f)
find . -type d
# 在 /var/log 下找所有 .log 文件
find /var/log -type f -name "*.log"
# 查找大于 100MB 的文件
find / -type f -size +100M
# 查找 1KB ~ 10MB 之间的文件(+ 大于,- 小于)
find / -type f -size +1k -size -10M
# 在所有 Android.bp 中搜索包含 name: "CarSystemUI-core" 的文件
find . -name "Android.bp" | xargs grep 'name: "CarSystemUI-core*"'
# 在 .java 文件中查找包含关键字的文件
find . -name "*.java" -exec grep -l "UnisocPowerManager" {} ;
二十四、Android Studio 快捷键
| 快捷键 | 作用 |
|---|---|
Ctrl + O | 列出可重写 / 已重写方法 |
Ctrl + H | 类的继承层级树 |
Ctrl + U | 跳到方法 / 类的父类 |
Ctrl + F12 | 快速浏览当前文件成员(弹窗,可输入过滤) |
二十五、常用路径记录
# 个人代码根目录(MSYS 环境)
/s/ci/hedong
# 个人目录
/Users/... (Windows: C:\Users\ZQ)
本手册由个人笔记整理而成,命令以实际设备环境为准;涉及系统分区写操作请先确认已解锁(remount)。