1. ADB工具概述与基础环境搭建
ADB(Android Debug Bridge)是Android开发者工具包(SDK)中最重要的命令行工具之一。它本质上是一个客户端-服务器程序,由三个核心组件构成:
- ADB Client:运行在开发机上的命令行工具
- ADB Server:在开发机后台运行的管理进程
- ADB Daemon:在Android设备或模拟器上运行的守护进程
这个架构允许我们通过USB或网络与Android设备进行通信。我经常遇到新手开发者卡在环境配置这一步,以下是经过验证的配置流程:
1.1 安装ADB工具包
推荐通过Android Studio的SDK Manager安装:
- 打开Android Studio → Configure → SDK Manager
- 在SDK Tools选项卡勾选"Android SDK Platform-Tools"
- 点击Apply进行安装
独立安装包方式(适合非开发者):
bash复制# Windows
curl -O https://dl.google.com/android/repository/platform-tools-latest-windows.zip
# macOS
curl -O https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
# Linux
curl -O https://dl.google.com/android/repository/platform-tools-latest-linux.zip
1.2 环境变量配置
将platform-tools目录添加到系统PATH中:
-
Windows:
- 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
- 在系统变量中找到Path,添加类似
C:\Users\YourName\AppData\Local\Android\Sdk\platform-tools
-
macOS/Linux:
在~/.zshrc或~/.bashrc中添加:bash复制export PATH=$PATH:~/Library/Android/sdk/platform-tools然后执行:
bash复制source ~/.zshrc
验证安装:在终端输入
adb version,应显示类似"Android Debug Bridge version 1.0.41"的版本信息
1.3 设备连接与授权
首次连接设备时需要授权:
- 在Android设备上启用开发者选项(设置 → 关于手机 → 连续点击"版本号"7次)
- 开启USB调试(开发者选项 → USB调试)
- 连接USB线后,在设备上弹出的对话框中勾选"始终允许"并确认
常见连接问题排查:
- adb unauthorized:检查设备是否弹出授权对话框,或尝试
adb kill-server && adb start-server - 设备未列出:确保USB线正常工作,尝试更换线缆或USB端口
- 模拟器连接问题:对于MuMu等模拟器,可能需要特定端口:
bash复制adb connect 127.0.0.1:7555 # MuMu模拟器默认端口
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备管理核心命令
2.1 设备连接与状态查询
bash复制# 列出已连接设备
adb devices -l # -l参数显示详细信息
# 输出示例:
List of devices attached
emulator-5554 device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1
ABCDEF1234567890 device usb:1-1 product:dreamqlteue model:SM_G950U device:dreamqlteue transport_id:2
# 获取设备状态
adb get-state # 返回device/offline/unknown
# 查看设备信息
adb shell getprop ro.product.model # 获取设备型号
adb shell getprop ro.build.version.release # 获取Android版本
2.2 多设备操作技巧
当连接多个设备时,需要使用-s指定设备:
bash复制adb -s emulator-5554 shell pm list packages
更高效的方式是设置环境变量:
bash复制export ANDROID_SERIAL=emulator-5554
adb shell pm list packages # 将自动作用于指定设备
2.3 网络ADB配置
无线调试免USB线方案:
- 先用USB连接设备:
bash复制adb tcpip 5555 # 开启设备的TCP监听端口 - 断开USB后通过IP连接:
bash复制
adb connect 192.168.1.100:5555
注意:部分厂商设备需要额外开启"无线调试"选项(Android 11+)
3. 应用管理深度操作
3.1 应用安装与卸载
bash复制# 安装APK(保留数据)
adb install app-debug.apk
# 覆盖安装(-r)并保留数据
adb install -r app-debug.apk
# 安装到特定用户(多用户设备)
adb install --user 10 app-debug.apk
# 卸载应用但保留数据
adb uninstall -k com.example.app
# 完全卸载(包括数据)
adb uninstall com.example.app
# 批量安装当前目录所有APK(Shell技巧)
for apk in *.apk; do adb install "$apk"; done
3.2 应用数据管理
bash复制# 清除应用数据(相当于设置中的"清除数据")
adb shell pm clear com.example.app
# 备份应用数据(需要设备未加密)
adb backup -f backup.ab -apk -shared com.example.app
# 恢复备份
adb restore backup.ab
# 提取应用数据(需要root)
adb shell "su -c 'tar -czf /sdcard/data.tgz /data/data/com.example.app'"
adb pull /sdcard/data.tgz .
3.3 应用权限管理
bash复制# 列出所有权限组
adb shell pm list permission-groups
# 授予/撤销权限
adb shell pm grant com.example.app android.permission.CAMERA
adb shell pm revoke com.example.app android.permission.READ_CONTACTS
# 重置所有权限
adb shell pm reset-permissions
4. 文件系统操作技巧
4.1 基础文件操作
bash复制# 推送文件到设备
adb push local.txt /sdcard/
# 从设备拉取文件
adb pull /sdcard/remote.txt .
# 查看设备文件
adb shell ls -la /sdcard/Download/
# 递归复制目录
adb shell cp -r /sdcard/backup/ /sdcard/archive/
# 创建符号链接
adb shell ln -s /data/user/0/com.example.app /sdcard/link
4.2 高级文件管理
处理特殊文件时的技巧:
bash复制# 查看文件属性
adb shell lsattr /system/build.prop
# 修改文件权限(需要root)
adb shell "su -c 'chmod 644 /system/build.prop'"
# 修改文件所有者
adb shell "su -c 'chown system:system /data/local/tmp/test.sh'"
# 处理文件名含空格的情况
adb shell "rm '/sdcard/My Documents/old file.txt'"
4.3 文件系统监控
bash复制# 监控文件变化(需要root)
adb shell "su -c 'inotifywait -m -r /data/data/com.example.app'"
# 查找大文件
adb shell "find /sdcard -type f -size +10M -exec ls -lh {} \;"
# 磁盘空间分析
adb shell df -h
adb shell du -sh /data/data/*
5. 系统调试与性能分析
5.1 日志收集与分析
bash复制# 查看完整日志
adb logcat
# 按标签过滤日志
adb logcat -s ActivityManager:W PackageManager:I
# 按优先级过滤(V/D/I/W/E/F)
adb logcat *:E
# 将日志输出到文件
adb logcat -d > log.txt
# 清空日志缓冲区
adb logcat -c
# 查看内核日志
adb shell dmesg
# 查看事件日志
adb shell getevent -l
5.2 性能监控工具
bash复制# CPU使用率(top命令)
adb shell top -n 1
# 内存使用情况
adb shell dumpsys meminfo
# 电池状态
adb shell dumpsys battery
# 网络状态
adb shell netstat -tuln
# 磁盘I/O统计
adb shell cat /proc/diskstats
# GPU渲染分析
adb shell dumpsys gfxinfo com.example.app
5.3 系统服务控制
bash复制# 重启设备
adb reboot
adb reboot bootloader # 进入bootloader
adb reboot recovery # 进入recovery
# 关闭设备
adb shell reboot -p
# 启动Activity
adb shell am start -n com.example.app/.MainActivity
# 发送广播
adb shell am broadcast -a com.example.action.TEST
# 强制停止应用
adb shell am force-stop com.example.app
# 模拟按键事件
adb shell input keyevent KEYCODE_HOME
6. 高级调试技巧
6.1 屏幕操作自动化
bash复制# 截图
adb exec-out screencap -p > screen.png
# 录制屏幕(需要Android 4.4+)
adb shell screenrecord /sdcard/demo.mp4
# 按Ctrl+C停止录制
# 模拟触摸
adb shell input tap 500 500
# 模拟滑动
adb shell input swipe 100 500 900 500 200
# 模拟文本输入
adb shell input text "hello@example.com"
# 禁用/启用键盘
adb shell ime disable com.android.inputmethod.latin
adb shell ime enable com.android.inputmethod.latin
6.2 网络调试技巧
bash复制# 查看网络配置
adb shell ifconfig
adb shell netcfg
# 修改网络配置(需要root)
adb shell "su -c 'ifconfig wlan0 192.168.1.100 netmask 255.255.255.0'"
# 端口转发
adb forward tcp:8080 tcp:8080
# 反向端口转发(设备监听端口映射到主机)
adb reverse tcp:8080 tcp:8080
# 网络测速
adb shell ping -c 4 8.8.8.8
adb shell curl -o /dev/null -s -w '%{time_total}\n' http://example.com
6.3 系统属性修改
bash复制# 查看所有属性
adb shell getprop
# 查看特定属性
adb shell getprop ro.build.version.sdk
# 设置临时属性(需要root)
adb shell "su -c 'setprop debug.layout true'"
# 修改build.prop(需要remount)
adb root
adb remount
adb pull /system/build.prop .
# 编辑后
adb push build.prop /system/
adb shell chmod 644 /system/build.prop
adb reboot
7. 模拟器与特殊设备管理
7.1 主流模拟器操作
bash复制# 列出模拟器
emulator -list-avds
# 启动模拟器
emulator @Pixel_3a_API_30 -no-snapshot-load
# MuMu模拟器特殊命令
adb connect 127.0.0.1:7555
# 夜神模拟器
adb connect 127.0.0.1:62001
# 雷电模拟器
adb connect 127.0.0.1:5555
# 关闭模拟器
adb -s emulator-5554 emu kill
7.2 云手机与车机操作
bash复制# 8155车机调试
adb connect 192.168.1.200:5555
# 云手机配置
adb shell settings put global adb_enabled 1
# 创维电视开启ADB
adb connect 192.168.1.201:5555
adb shell setprop persist.adb.tcp.port 5555
7.3 多用户管理
bash复制# 列出所有用户
adb shell pm list users
# 创建新用户
adb shell pm create-user test_user
# 切换用户
adb shell am switch-user 10
# 删除用户
adb shell pm remove-user 10
8. 安全与权限管理
8.1 签名与验证
bash复制# 查看APK签名
adb shell dumpsys package com.example.app | grep signatures
# 验证APK
adb shell pm verify -v com.example.app
# 检查权限使用情况
adb shell dumpsys package com.example.app | grep -A 5 "Requested Permissions"
8.2 SELinux策略
bash复制# 查看当前模式
adb shell getenforce
# 临时修改模式
adb shell setenforce 0 # Permissive
adb shell setenforce 1 # Enforcing
# 查看SELinux上下文
adb shell ls -Z /system/bin/sh
8.3 安全审计
bash复制# 查看su命令使用记录
adb shell "su -c 'cat /data/adb/su/sulog'"
# 检查root状态
adb shell "su -c 'id'"
# 查看已安装的su二进制
adb shell which su
adb shell ls -l /system/xbin/su
9. 自动化脚本编写
9.1 Shell脚本集成
bash复制#!/bin/bash
# 等待设备上线
adb wait-for-device
echo "Device connected"
# 批量安装APK
for apk in /path/to/apks/*.apk; do
adb install "$apk"
done
# 执行设备端脚本
adb push script.sh /data/local/tmp/
adb shell chmod +x /data/local/tmp/script.sh
adb shell /data/local/tmp/script.sh
9.2 Python自动化示例
python复制import subprocess
import re
def get_connected_devices():
result = subprocess.run(['adb', 'devices'], capture_output=True, text=True)
devices = []
for line in result.stdout.split('\n')[1:]:
if line.strip() and 'offline' not in line:
devices.append(line.split('\t')[0])
return devices
def install_apk(device_serial, apk_path):
cmd = ['adb', '-s', device_serial, 'install', apk_path]
try:
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
print(f"Installed {apk_path} on {device_serial}")
return True
except subprocess.CalledProcessError as e:
print(f"Failed to install on {device_serial}: {e.output.decode()}")
return False
9.3 常见问题处理
bash复制# 处理"no such file or directory"错误
if adb shell "[ -f /path/to/file ]"; then
adb shell "rm /path/to/file"
fi
# 处理空间不足问题
adb shell "df -h /data" | grep -v Used | awk '{print $4}' | cut -d'%' -f1
# 处理ADB server崩溃
pgrep adb || adb start-server
10. 实用命令组合与技巧
10.1 高效调试组合技
bash复制# 一键清除应用数据并重启
adb shell pm clear com.example.app && adb shell am start -n com.example.app/.MainActivity
# 监控Activity启动
adb shell "logcat -s ActivityManager:I | grep 'START u0'"
# 获取当前焦点窗口信息
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
# 查看应用冷启动时间
adb shell am start -W -n com.example.app/.MainActivity | grep TotalTime
10.2 性能优化相关
bash复制# 禁用动画提高测试速度
adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0
# 强制GPU渲染
adb shell settings put global force_gpu_raster 1
# 显示布局边界
adb shell setprop debug.layout true
adb shell service call activity 1599295570 # 刷新界面
10.3 设备信息大全
bash复制# 获取完整设备信息
echo "===== SYSTEM ====="
adb shell getprop | grep -E 'ro.product|ro.build|ro.serialno'
echo "\n===== CPU ====="
adb shell cat /proc/cpuinfo
echo "\n===== MEMORY ====="
adb shell cat /proc/meminfo
echo "\n===== STORAGE ====="
adb shell df -h
echo "\n===== BATTERY ====="
adb shell dumpsys battery
在实际工作中,我发现将常用命令保存为脚本可以极大提高效率。比如我常用的device_info.sh就包含了上述信息收集命令,配合adb pull可以快速建立设备档案。对于测试工程师,建议将关键命令与测试用例结合,实现自动化测试流程。
