1. 概述
ADB (Android Debug Bridge) 是Android开发调试的核心工具,提供了设备与PC之间的通信桥梁。本文详细介绍RK3588 Android12平台的ADB配置、连接方式、权限获取及常见问题解决。
1.1 ADB功能
- 文件传输(push/pull)
- 应用安装/卸载
- Shell命令执行
- 日志查看(logcat)
- 端口转发
- 屏幕截图/录屏
1.2 连接方式
- USB连接(最常用)
- 网络连接(WiFi/以太网)
- 串口连接(特殊场景)
2. USB ADB配置
2.1 PC端ADB工具安装
Ubuntu系统
# 方法1:apt安装(推荐)
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
# 方法2:下载SDK Platform Tools
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools-latest-linux.zip
sudo mv platform-tools /opt/
echo 'export PATH=$PATH:/opt/platform-tools' >> ~/.bashrc
source ~/.bashrc
# 验证安装
adb version
Windows系统
# 下载并安装
# https://developer.android.com/studio/releases/platform-tools
# 添加到系统PATH
# 控制面板 -> 系统 -> 高级系统设置 -> 环境变量
# 添加:C:\platform-tools
2.2 设备端USB配置
设备树配置
// kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-xxx.dts
&usbdrd3_0 {
status = "okay";
};
&usbdrd_dwc3_0 {
status = "okay";
dr_mode = "peripheral"; // 或 "otg"
};
&u2phy0 {
status = "okay";
};
&u2phy0_otg {
status = "okay";
};
init.rc配置
# device/rockchip/rk3588/init.rk3588.rc
on boot
# 启用ADB
setprop persist.sys.usb.config adb
on property:sys.usb.config=adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 2207
write /sys/class/android_usb/android0/idProduct 0006
write /sys/class/android_usb/android0/functions adb
write /sys/class/android_usb/android0/enable 1
start adbd
2.3 USB权限配置(Linux)
# 创建udev规则
sudo vim /etc/udev/rules.d/51-android.rules
# 添加RK设备规则
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", ATTR{idProduct}=="0006", SYMLINK+="android_adb"
# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
# 添加用户到plugdev组
sudo usermod -aG plugdev $USER
2.4 连接测试
# 连接设备后查看
adb devices
# 正常输出
List of devices attached
1234567890ABCDEF device
# 如果显示unauthorized
# 设备端会弹出授权对话框,点击"允许"
3. 网络ADB配置
3.1 WiFi ADB
方法1:通过USB先连接
# 1. USB连接设备
adb devices
# 2. 获取设备IP
adb shell ip addr show wlan0 | grep inet
# 3. 启用网络ADB(端口5555)
adb tcpip 5555
# 4. 断开USB,通过网络连接
adb connect 192.168.1.100:5555
# 5. 验证连接
adb devices
方法2:设备端直接启用
# 串口或终端执行
setprop service.adb.tcp.port 5555
stop adbd
start adbd
# 查看监听端口
netstat -tuln | grep 5555
3.2 以太网ADB
# 获取以太网IP
adb shell ip addr show eth0 | grep inet
# 连接
adb connect 192.168.1.100:5555
3.3 开机自动启用网络ADB
# device/rockchip/rk3588/init.rk3588.rc
on boot
# 启用网络ADB
setprop service.adb.tcp.port 5555
setprop persist.adb.tcp.port 5555
on property:persist.adb.tcp.port=*
restart adbd
4. Root权限获取
4.1 userdebug版本(默认可root)
# 查看版本类型
adb shell getprop ro.build.type
# 输出:userdebug
# 直接获取root
adb root
# 重新挂载system为可写
adb remount
# 验证
adb shell
# 提示符变为 #
4.2 user版本启用root
修改编译配置
# device/rockchip/rk3588/BoardConfig.mk
# 注释掉user版本限制
# BOARD_BUILD_TYPE := user
# 或修改为userdebug
BOARD_BUILD_TYPE := userdebug
修改init.rc
# system/core/rootdir/init.rc
on property:ro.debuggable=1
# 允许root
write /proc/sys/kernel/sysrq 1
4.3 临时获取root(已root设备)
# 方法1:su命令
adb shell
su
# 方法2:直接root shell
adb shell su -c "command"
# 方法3:adb root(需要ro.debuggable=1)
adb root
5. Remount系统分区
5.1 传统方法
# 1. 获取root权限
adb root
# 2. 重新挂载
adb remount
# 3. 验证
adb shell mount | grep system
# 输出应包含 rw(可读写)
5.2 Android 10+动态分区
# 1. 禁用dm-verity
adb root
adb disable-verity
adb reboot
# 2. 重新挂载
adb root
adb remount
# 3. 手动挂载(如果remount失败)
adb shell
mount -o rw,remount /system
mount -o rw,remount /vendor
5.3 修改只读属性
# 临时修改
adb shell
setenforce 0 # 关闭SELinux
mount -o rw,remount /
# 永久修改(编译时)
# device/rockchip/rk3588/fstab.rk3588
/dev/block/by-name/system /system ext4 ro,barrier=1 wait,avb
# 改为
/dev/block/by-name/system /system ext4 rw,barrier=1 wait,avb
6. ADB常用命令
6.1 设备管理
# 列出设备
adb devices -l
# 指定设备操作(多设备时)
adb -s 1234567890ABCDEF shell
# 等待设备连接
adb wait-for-device
# 重启设备
adb reboot
adb reboot bootloader # 进入fastboot
adb reboot recovery # 进入recovery
6.2 文件操作
# 推送文件到设备
adb push local_file /sdcard/
adb push app.apk /data/local/tmp/
# 从设备拉取文件
adb pull /sdcard/file.txt ./
adb pull /system/build.prop ./
# 同步目录
adb push -p local_dir/ /sdcard/remote_dir/
6.3 应用管理
# 安装APK
adb install app.apk
adb install -r app.apk # 覆盖安装
adb install -g app.apk # 授予所有权限
# 卸载应用
adb uninstall com.example.app
adb uninstall -k com.example.app # 保留数据
# 列出应用
adb shell pm list packages
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages -s # 系统应用
# 清除应用数据
adb shell pm clear com.example.app
6.4 日志查看
# 实时日志
adb logcat
# 过滤日志
adb logcat -s TAG
adb logcat *:E # 只显示错误
adb logcat | grep "keyword"
# 保存日志
adb logcat -d > logcat.txt
# 清除日志
adb logcat -c
# 内核日志
adb shell dmesg
adb shell cat /proc/kmsg
6.5 Shell命令
# 进入shell
adb shell
# 执行单条命令
adb shell ls -l /system/app
# 查看属性
adb shell getprop
adb shell getprop ro.build.version.release
# 设置属性
adb shell setprop debug.test 1
# 截图
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png
# 录屏
adb shell screenrecord /sdcard/demo.mp4
# Ctrl+C停止录制
adb pull /sdcard/demo.mp4
7. 调试技巧
7.1 端口转发
# 转发设备端口到PC
adb forward tcp:8080 tcp:8080
# 反向转发(PC端口到设备)
adb reverse tcp:8080 tcp:8080
# 列出转发
adb forward --list
# 移除转发
adb forward --remove tcp:8080
adb forward --remove-all
7.2 无线调试优化
# 保持WiFi常开
adb shell settings put global wifi_sleep_policy 2
# 禁用WiFi省电模式
adb shell settings put global wifi_power_save 0
# 固定IP(避免IP变化)
# 在路由器中绑定MAC地址
7.3 多设备管理脚本
#!/bin/bash
# adb_multi.sh
# 列出所有设备
devices=$(adb devices | grep -v "List" | awk '{print $1}')
# 对每个设备执行命令
for device in $devices; do
echo "=== Device: $device ==="
adb -s $device shell getprop ro.product.model
adb -s $device shell getprop ro.build.version.release
done
8. 常见问题
8.1 设备未识别
现象 :adb devices 无输出或显示 unauthorized
排查步骤:
# 1. 检查USB连接
lsusb | grep 2207
# 2. 检查udev规则
cat /etc/udev/rules.d/51-android.rules
# 3. 重启adb服务
adb kill-server
adb start-server
# 4. 检查设备端adbd
adb shell ps -A | grep adbd
# 5. 查看USB配置
adb shell getprop sys.usb.config
解决方法:
# 设备端重启adbd
adb shell
stop adbd
start adbd
# 或通过属性触发
setprop sys.usb.config adb
8.2 无法remount
现象 :adb remount 失败,提示 Read-only file system
解决方法:
# 1. 禁用dm-verity
adb root
adb disable-verity
adb reboot
# 2. 重新尝试
adb root
adb remount
# 3. 手动挂载
adb shell
mount -o rw,remount /system
mount -o rw,remount /vendor
8.3 网络ADB断开
现象:WiFi ADB频繁断开
解决方法:
# 1. 禁用WiFi休眠
adb shell settings put global wifi_sleep_policy 2
# 2. 保持唤醒
adb shell settings put global stay_on_while_plugged_in 7
# 3. 使用有线网络
# 以太网比WiFi更稳定
# 4. 脚本自动重连
#!/bin/bash
while true; do
adb connect 192.168.1.100:5555
sleep 60
done
8.4 权限不足
现象 :执行命令提示 Permission denied
解决方法:
# 1. 获取root权限
adb root
# 2. 关闭SELinux
adb shell setenforce 0
# 3. 修改文件权限
adb shell chmod 777 /path/to/file
# 4. 修改文件所有者
adb shell chown root:root /path/to/file
8.5 端口被占用
现象 :adb start-server 失败,提示端口占用
解决方法:
# 1. 查找占用进程
lsof -i :5037
netstat -tuln | grep 5037
# 2. 杀死进程
kill -9 <PID>
# 3. 重启adb
adb kill-server
adb start-server
# 4. 更换端口
export ANDROID_ADB_SERVER_PORT=5038
adb -P 5038 start-server
9. 安全配置
9.1 生产环境禁用ADB
# device/rockchip/rk3588/init.rk3588.rc
on boot
# 禁用ADB
setprop persist.sys.usb.config mtp
stop adbd
9.2 限制ADB访问
# 只允许特定PC连接
# 1. 生成adb密钥
adb keygen ~/.android/adbkey
# 2. 将公钥推送到设备
adb push ~/.android/adbkey.pub /data/misc/adb/adb_keys
# 3. 重启adbd
adb shell stop adbd
adb shell start adbd
9.3 网络ADB安全
# 1. 使用防火墙限制IP
iptables -A INPUT -p tcp --dport 5555 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 5555 -j DROP
# 2. 使用VPN
# 通过VPN连接设备,避免公网暴露
# 3. 定期更换端口
setprop service.adb.tcp.port 5556
10. 总结
ADB是Android开发的必备工具,掌握其配置和使用技巧能大幅提升开发效率。关键要点:
- USB连接:配置udev规则,确保设备识别
- 网络连接:适合无USB场景,注意安全性
- Root权限:userdebug版本可直接root
- Remount:Android 10+需要disable-verity
- 常用命令:熟练掌握文件、应用、日志操作
- 安全配置:生产环境务必禁用ADB