1. ADB工具基础认知与ROM开发环境搭建
1.1 ADB的本质与工作原理
Android Debug Bridge(ADB)是Android SDK中最重要的命令行工具之一,它采用C/S架构实现设备与开发机的通信。核心组件包括:
- adb client:运行在开发机上的命令行界面
- adb server:管理通信的后台进程(默认监听5037端口)
- adb daemon:运行在Android设备上的守护进程
当执行adb devices时,实际发生了以下流程:
- 客户端检查5037端口是否已有服务
- 若无则启动adb server进程
- server通过USB或网络连接设备端的adbd
- adbd返回设备序列号和状态
注意:部分定制ROM可能默认关闭adbd,需在开发者选项中启用USB调试模式。若遇到设备未识别,可尝试
adb kill-server && adb start-server重置服务。
1.2 ROM开发者专用环境配置
完整的环境搭建需要以下组件:
# 基础工具链安装(Ubuntu示例) sudo apt install android-tools-adb android-tools-fastboot # 扩展工具推荐 sudo apt install git-core gnupg flex bison gperf build-essential对于Windows平台开发者,建议:
- 下载最新Platform Tools包
- 解压后添加路径到系统环境变量
- 安装通用USB驱动(如Google USB Driver)
设备端需要进行的特殊配置:
- 连续点击"版本号"激活开发者模式
- 开启"OEM解锁"选项(刷机必需)
- 启用"USB调试"和"调试模式下的Root权限"
2. ADB核心命令在ROM开发中的高阶应用
2.1 设备管理深度操作
2.1.1 多设备会话控制
当连接多个设备时,需指定目标设备:
adb -s <serial> <command> # 通过序列号指定 adb -e <command> # 仅对模拟器生效 adb -d <command> # 仅对物理设备生效实战案例:批量操作连接的所有设备
for device in $(adb devices | grep -v List | cut -f1); do adb -s $device install demo.apk done2.1.2 无线调试的持久化方案
标准Wi-Fi调试流程存在重启失效问题,可通过修改系统属性实现持久化:
adb shell su -c "setprop persist.adb.tcp.port 5555" adb shell su -c "stop adbd && start adbd"警告:此操作需要系统级权限,部分厂商ROM可能限制属性修改。建议在自定义ROM中直接集成该配置。
2.2 文件系统操作黑科技
2.2.1 分区镜像操作技巧
获取系统分区镜像(需root):
adb shell su -c "dd if=/dev/block/bootdevice/by-name/system of=/sdcard/system.img" adb pull /sdcard/system.img推送修改后的镜像:
adb push system.img /sdcard adb shell su -c "dd if=/sdcard/system.img of=/dev/block/bootdevice/by-name/system"2.2.2 批量文件操作模式
使用find配合adb实现复杂文件管理:
# 查找所有.apk文件并拉取到本地 adb shell "find /system -name '*.apk'" | while read file; do adb pull $file ./apks/ done # 批量推送文件到设备 find ./overlay -type f | while read file; do adb push $file /system/${file#./overlay/} done3. ROM调试与系统级操作实战
3.1 日志分析进阶技巧
3.1.1 日志过滤的终极方案
组合使用grep和logcat实现精准过滤:
adb logcat -v time | grep -E "BootAnimation|SystemServer"保存带时间戳的日志:
adb logcat -v threadtime > boot.log3.1.2 内核日志获取方法
通过dmesg获取内核日志:
adb shell su -c "dmesg" > kernel.log持续监控内核事件:
adb shell su -c "cat /proc/kmsg" > kmsg.log3.2 系统属性深度管理
3.2.1 关键属性字典
常用属性查询:
# 获取设备基础信息 adb shell getprop ro.product.model adb shell getprop ro.build.version.incremental # 获取安全补丁级别 adb shell getprop ro.build.version.security_patch3.2.2 属性修改风险操作
修改系统属性(仅限开发版ROM):
adb shell su -c "mount -o rw,remount /system" adb shell su -c "echo 'ro.debuggable=1' >> /system/build.prop" adb reboot重要警告:错误修改build.prop可能导致设备无法启动,操作前务必备份!
4. ROM定制开发专项技能
4.1 系统服务控制命令
4.1.1 服务管理命令集
查看运行中的服务:
adb shell service list控制特定服务:
adb shell su -c "stop zygote" # 停止核心服务(危险!) adb shell su -c "start zygote" # 恢复服务4.1.2 组件管理命令
禁用系统应用(无需卸载):
adb shell pm disable-user <package>恢复被禁用的应用:
adb shell pm enable <package>4.2 性能分析与优化
4.2.1 CPU频率控制
查看CPU状态:
adb shell cat /proc/cpuinfo adb shell su -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"临时修改频率(需内核支持):
adb shell su -c "echo 1497600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"4.2.2 内存优化技巧
查看内存分布:
adb shell dumpsys meminfo重点监控项:
PSS : Proportional Set Size(实际使用的物理内存) SwapPss : 被交换到zRAM的内存 Objects : 对象数量(警惕Activity泄漏)5. 高级调试与逆向工程支持
5.1 端口转发与网络调试
5.1.1 复杂转发方案
多级端口转发:
adb forward tcp:8080 tcp:8888 adb forward tcp:8888 localabstract:myapp反向端口转发(设备访问主机服务):
adb reverse tcp:8080 tcp:805.1.2 网络诊断工具链
抓包分析(需root):
adb shell su -c "tcpdump -i any -s 0 -w /sdcard/capture.pcap" adb pull /sdcard/capture.pcap网络状态实时监控:
adb shell netstat -tuln adb shell ip route5.2 系统级Hook与注入
5.2.1 动态库注入技术
推送预加载库:
adb push libinject.so /data/local/tmp设置LD_PRELOAD:
adb shell su -c "export LD_PRELOAD=/data/local/tmp/libinject.so"5.2.2 进程附加调试
获取进程PID:
adb shell ps -A | grep <process>使用gdbserver附加:
adb shell su -c "gdbserver :1234 --attach <pid>"主机端连接:
gdb -ex "target remote :1234"6. 自动化脚本与批量操作
6.1 Shell脚本集成方案
6.1.1 本地脚本远程执行
直接执行设备上的脚本:
adb push script.sh /data/local/tmp adb shell sh /data/local/tmp/script.sh实时传入脚本内容:
adb shell <<EOF echo "Running on device $(getprop ro.product.model)" pm list packages | grep google EOF6.1.2 复杂条件判断
带条件的批量操作:
for pkg in $(adb shell pm list packages -3 | cut -d: -f2); do if adb shell dumpsys package $pkg | grep -q "versionCode=123"; then adb uninstall $pkg fi done6.2 结合Python实现高级自动化
6.2.1 使用subprocess控制ADB
Python控制示例:
import subprocess def adb(command): return subprocess.check_output(f"adb {command}", shell=True).decode() devices = [d.split('\t')[0] for d in adb("devices").split('\n')[1:] if d]6.2.2 多线程设备管理
并发操作示例:
from concurrent.futures import ThreadPoolExecutor def process_device(serial): subprocess.run(f"adb -s {serial} install app.apk", shell=True) with ThreadPoolExecutor(max_workers=5) as executor: executor.map(process_device, devices)7. 安全防护与风险规避
7.1 敏感操作保护机制
7.1.1 操作确认流程
危险命令前添加确认:
read -p "确认要擦除data分区吗?(y/n)" answer [[ $answer == "y" ]] && adb shell su -c "wipe data"7.1.2 自动备份策略
关键分区备份脚本:
backup_dir=$(date +%Y%m%d_%H%M) mkdir $backup_dir for part in system vendor boot; do adb shell su -c "dd if=/dev/block/bootdevice/by-name/$part" > $backup_dir/$part.img done7.2 权限管理最佳实践
7.2.1 最小权限原则
避免不必要的root操作:
# 优先尝试非root方式 adb shell cmd package install-existing <pkg>7.2.2 临时权限授予
使用run-as访问应用数据:
adb shell run-as <package> cat /data/data/<package>/files/config.json8. 性能调优与深度定制
8.1 启动时间优化
8.1.1 启动过程分析
获取详细启动时序:
adb shell su -c "cat /proc/bootprof"生成启动时间报告:
adb shell su -c "bootstat --record" adb pull /data/misc/boottrace/8.1.2 服务启动优化
禁用延迟服务:
adb shell su -c "pm disable <service>"调整服务优先级:
adb shell su -c "echo -17 > /proc/$(pidof <service>)/oom_adj"8.2 图形性能调优
8.2.1 GPU渲染分析
启用调试工具:
adb shell su -c "setprop debug.hwui.profile true" adb shell su -c "stop && start"获取渲染数据:
adb shell dumpsys gfxinfo <package>8.2.2 SurfaceFlinger控制
修改显示参数:
adb shell su -c "service call SurfaceFlinger 1008 i32 0"强制GPU渲染:
adb shell su -c "setprop debug.egl.force_gpu 1"