1. 手机变电脑?先搞清楚OTG和ADB到底能干什么
手里只有一部手机,电脑不在身边,系统崩了想刷机、想进恢复模式、想解锁Bootloader,怎么办?这个问题我遇到过太多次了。早些年大家的共识是“刷机必须用电脑”,因为Fastboot和ADB这两个核心工具都跑在桌面端。但这两年安卓生态变化很大,手机本身的硬件能力已经足够强,配合一根OTG线和一个终端模拟器,完全可以实现“零电脑刷机”。我自己用这套方案救回过三台机器,包括一台卡在Fastboot界面死活进不去系统的旧机型,还有一台被朋友误删系统文件后无限重启的备用机。
先说清楚这套方案的核心逻辑。OTG是On-The-Go的缩写,本质上是让手机从“从设备”切换成“主设备”,这样你才能通过USB口连接其他设备——比如连接另一部手机、连接U盘、连接键盘鼠标。而ADB是Android Debug Bridge的缩写,是安卓调试桥的意思,它提供了一套命令行工具,让你可以和安卓系统的底层服务通信。Fastboot则是比ADB更底层的一个协议,工作在Bootloader模式下,用来刷写分区镜像、解锁引导程序、临时启动恢复镜像等。
那“手机变电脑”这个说法到底成不成立?严格来说,手机不可能变成一台完整的电脑,但在这套方案里,手机扮演了两个角色:一是作为“操作终端”,通过Termux这类终端模拟器运行ADB和Fastboot命令;二是作为“供电和通信主机”,通过OTG线给被刷设备提供连接通道。换句话说,你的手机就是一台便携式的刷机工作站。
这套方案适合什么人?我总结了三类:第一类是经常帮朋友救砖的搞机爱好者,随身带一根线就能干活;第二类是手里有备用机但主力机不方便装驱动的普通用户,想折腾又不想在电脑上装一堆工具;第三类是维修店或者二手手机从业者,需要快速检测和刷写多台设备。如果你属于这三类中的任何一类,接下来的内容值得你花时间看完。
注意:这套方案的前提是你的手机本身支持OTG功能,并且系统版本在Android 7.0以上。部分定制ROM可能阉割了OTG驱动,需要提前确认。
2. 方案整体设计与核心工具选型
2.1 为什么选择Termux而不是其他终端模拟器
安卓上的终端模拟器有不少选择,比如Termux、Termius、JuiceSSH等。但真正能跑ADB和Fastboot的,Termux是唯一一个我实测下来稳定可用的。原因有三点:第一,Termux自带包管理器,可以直接安装Android SDK的platform-tools,不需要root权限;第二,Termux的底层是基于Linux的,对USB设备的访问权限处理得比较完善;第三,Termux支持后台运行和快捷键操作,刷机过程中不会因为切后台就断连。
其他终端模拟器要么是纯SSH客户端,要么需要root才能访问USB设备节点,都不适合这个场景。我试过用Termius跑ADB,结果连设备都识别不到,因为Termius没有USB权限。所以工具选型上,Termux是唯一解。
2.2 OTG线的选择:别贪便宜,芯片方案很关键
OTG线看起来就是一根普通的转接线,但里面的芯片方案差别很大。我踩过的坑是:买了一条九块九包邮的OTG线,连U盘没问题,但连手机做ADB调试时死活识别不到设备。后来拆开看,里面用的是廉价的USB 2.0 Hub芯片,根本不支持设备模式切换。
目前市面上主流的OTG芯片方案有三种:Microchip的USB2514、TI的TUSB4041、以及国产的CH340系列。前两种支持USB 3.0和完整的OTG协议,CH340系列便宜但只支持USB 2.0,而且部分批次存在兼容性问题。如果你要刷的是较新的机型,建议选带USB 3.0 C口OTG芯片的线,比如搭载USB2514B的方案,实测下来对Fastboot的兼容性最好。
另外要注意接口类型。现在手机大部分是Type-C口,但被刷设备可能是Micro-USB口,所以你需要一根“Type-C转Micro-USB”的OTG线,或者一根“Type-C OTG转接头+普通数据线”的组合。我个人推荐后者,因为转接头可以换,数据线可以选质量好的,灵活性更高。
2.3 ADB和Fastboot工具的获取方式
在Termux里获取ADB和Fastboot有两种方式:一种是通过pkg安装,另一种是手动下载platform-tools压缩包。pkg安装的命令是pkg install android-tools,这个包里面包含了adb和fastboot的可执行文件。但要注意,Termux官方源里的android-tools版本可能比较旧,对Android 12以上的设备支持不够好。
手动下载的方式更可控。你可以从Android开发者官网下载最新的platform-tools压缩包,然后用Termux的解压命令解压到$PREFIX/bin目录下。具体命令是:
cd ~ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip unzip platform-tools-latest-linux.zip cp platform-tools/adb $PREFIX/bin/ cp platform-tools/fastboot $PREFIX/bin/ chmod +x $PREFIX/bin/adb $PREFIX/bin/fastboot这样安装的版本是最新的,兼容性最好。我实测下来,platform-tools 34.0.5版本对Android 14的设备也能正常识别。
2.4 被刷设备的准备工作
被刷的设备需要提前打开USB调试和OEM解锁。USB调试在“开发者选项”里,连续点击“版本号”七次就能激活开发者选项。OEM解锁在“开发者选项”里面,不同品牌的叫法可能不一样,小米叫“OEM解锁”,三星叫“OEM解锁”,OPPO和vivo部分机型没有这个选项,需要特殊处理。
另外,被刷设备的电量要保持在50%以上,刷机过程中断电是变砖的主要原因之一。如果设备已经卡在Fastboot界面进不去系统,那就不用管USB调试了,直接进Fastboot模式就行。
3. 核心细节解析与实操要点
3.1 Termux的环境配置与权限处理
Termux安装完成后,第一件事是更新源和升级包:
pkg update && pkg upgrade然后安装必要的依赖:
pkg install root-repo pkg install tsu pkg install android-tools pkg install usbutils这里解释一下每个包的作用。root-repo是Termux的root权限扩展源,tsu是Termux的sudo替代品,用来提权。android-tools就是ADB和Fastboot的集合包。usbutils提供了lsusb命令,用来查看USB设备列表。
关键的一步是权限处理。Termux默认没有USB设备的访问权限,你需要手动授权。在手机设置里找到“应用管理”,找到Termux,打开“USB设备访问”权限。部分机型还需要在开发者选项里打开“USB调试”和“默认USB配置”设为“文件传输”或“MIDI”。
提示:如果你的手机是Android 11以上,Termux可能无法直接访问
/dev/bus/usb目录。这时候需要用termux-usb命令来请求权限。具体操作是运行termux-usb -l列出设备,然后termux-usb -r -e ./adb devices来授权。
3.2 ADB连接被刷设备的完整流程
假设你已经用OTG线把两部手机连起来了,被刷设备已经进入Fastboot模式或者正常开机并开启了USB调试。接下来在Termux里执行:
adb devices如果一切正常,你会看到类似这样的输出:
List of devices attached ABCD1234 device如果显示unauthorized,说明被刷设备上没有授权这台“主机”。你需要在被刷设备的屏幕上点击“允许USB调试”弹窗。如果屏幕坏了点不了,那就只能进Fastboot模式用Fastboot命令操作。
如果显示no permissions,说明Termux没有USB权限。这时候需要运行:
tsu chmod 666 /dev/bus/usb/*/*然后再执行adb devices。
Fastboot模式的连接验证命令是:
fastboot devices正常输出应该是:
ABCD1234 fastboot如果没有任何输出,说明Fastboot驱动没有正确加载。这时候需要检查OTG线是否支持数据传输,有些OTG线只能供电不能传数据。
3.3 Fastboot刷写分区的参数计算与选择
Fastboot刷写的核心命令是fastboot flash <分区名> <镜像文件>。常见的分区有:
| 分区名 | 作用 | 是否必须刷写 |
|---|---|---|
| boot | 内核和恢复模式 | 是 |
| system | 系统镜像 | 是 |
| vendor | 厂商驱动 | 视情况 |
| userdata | 用户数据 | 否,会清空数据 |
| recovery | 恢复模式 | 可选 |
| vbmeta | 验证启动 | 部分机型必须 |
刷写顺序很重要。我一般建议先刷vbmeta,再刷boot,然后刷system和vendor,最后刷userdata。因为vbmeta负责验证启动链,如果先刷了其他分区再刷vbmeta,可能会导致验证失败无法开机。
参数方面,fastboot flash命令支持--slot参数来指定A/B分区。如果你的设备是A/B分区架构,需要分别刷写两个槽位:
fastboot flash boot_a boot.img fastboot flash boot_b boot.img或者用--slot=all一次性刷写两个槽位:
fastboot flash --slot=all boot boot.img3.4 临时启动恢复镜像的技巧
有时候你不想永久刷写恢复分区,只是想临时启动一个TWRP或者其他的恢复镜像来备份数据或者刷入Magisk。这时候可以用fastboot boot命令:
fastboot boot twrp.img这个命令不会写入任何分区,只是把镜像加载到内存里运行。重启后恢复分区还是原来的。这个技巧在保修期内特别有用,因为不会留下刷机痕迹。
但要注意,部分机型(比如小米的部分型号)对fastboot boot命令做了限制,会提示FAILED (remote: 'unknown command')。这时候只能先刷入恢复分区,操作完再刷回原版。
4. 实操过程与核心环节实现
4.1 从零开始:Termux安装与ADB环境搭建
我第一次在手机上跑ADB的时候,走了不少弯路。最开始用的是Google Play版的Termux,结果发现版本太旧,pkg命令都用不了。后来换了F-Droid版的Termux才正常。所以第一步,去F-Droid下载最新版的Termux,不要用Play商店的版本。
安装完成后,打开Termux,依次执行:
pkg update pkg upgrade pkg install android-tools这三条命令跑完,ADB和Fastboot就已经在$PREFIX/bin目录下了。你可以用which adb来验证:
which adb正常输出应该是/data/data/com.termux/files/usr/bin/adb。
接下来配置USB权限。运行:
lsusb如果能看到设备列表,说明USB权限已经有了。如果提示command not found,先安装usbutils:
pkg install usbutils如果lsusb输出为空,说明Termux没有USB访问权限。这时候需要去手机设置里手动授权。路径是:设置 → 应用 → Termux → 权限 → USB设备访问 → 允许。
4.2 连接被刷设备并进入Fastboot模式
被刷设备进入Fastboot模式的方法因品牌而异。小米是关机后按住“音量减+电源键”,三星是关机后按住“音量减+Home+电源键”,OPPO是关机后按住“音量减+电源键”。如果不确定,可以先开机用ADB命令重启到Fastboot:
adb reboot bootloader这条命令会直接把设备重启到Fastboot模式。前提是ADB已经连接成功并且授权了。
连接OTG线之后,在Termux里运行:
fastboot devices如果看到设备序列号,说明连接成功。如果没有,尝试以下排查步骤:
- 换一根OTG线,确认线材支持数据传输
- 运行
lsusb确认系统识别到了USB设备 - 运行
dmesg | grep usb查看内核日志,确认是否有USB枚举错误 - 检查被刷设备的Fastboot驱动是否正常,部分机型需要特定的Fastboot驱动
我遇到过最诡异的情况是:lsusb能看到设备,但fastboot devices就是没输出。后来发现是OTG线的供电不足,换了一根带辅助供电的OTG线就解决了。所以如果你刷的是平板或者老款手机,供电问题要特别注意。
4.3 刷写系统镜像的完整命令序列
假设你已经下载好了刷机包,解压后得到了一系列.img文件。以下是一个典型的刷写序列:
fastboot flash vbmeta vbmeta.img fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img fastboot flash userdata userdata.img fastboot reboot每条命令执行后,Fastboot会返回Sending 'xxx' (xxxx KB) OKAY和Writing 'xxx' OKAY。如果返回FAILED,说明刷写失败,需要根据错误信息排查。
常见的错误和解决方法:
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
| FAILED (remote: 'Not enough space') | 分区空间不足 | 检查镜像文件是否对应正确机型 |
| FAILED (remote: 'Signature mismatch') | 签名验证失败 | 先刷vbmeta禁用验证 |
| FAILED (remote: 'Flashing is not allowed') | Bootloader未解锁 | 先执行fastboot oem unlock |
| FAILED (remote: 'unknown command') | 命令不支持 | 检查Fastboot版本是否过旧 |
刷写完成后,用fastboot reboot重启设备。第一次开机可能会比较慢,因为系统需要重建缓存。如果卡在开机动画超过10分钟,可能是刷写不完整,需要重新进Fastboot检查分区状态。
4.4 用ADB sideload刷入OTA包
除了Fastboot刷写,ADB还支持sideload模式刷入OTA包。这个方法适合系统还能进恢复模式的情况。操作步骤是:
- 被刷设备进入恢复模式(Recovery)
- 选择“Apply update from ADB”
- 在Termux里运行:
adb sideload ota_package.zipsideload的好处是不需要解锁Bootloader,适合官方OTA更新或者签名验证严格的机型。但缺点是只能刷官方签名的包,不能刷第三方ROM。
我实测下来,sideload的传输速度比Fastboot慢不少,因为它是通过ADB协议传输的,而且有签名验证的开销。一个2GB的OTA包大概需要5-8分钟。所以如果时间充裕可以用sideload,赶时间还是用Fastboot。
5. 常见问题与排查技巧实录
5.1 ADB unauthorized的三种解决方案
adb unauthorized是我遇到频率最高的问题。表现是adb devices显示设备但状态是unauthorized。原因是被刷设备没有授权这台“主机”的调试请求。
解决方案一:在被刷设备屏幕上点击“允许USB调试”弹窗。这是最简单的,但如果屏幕坏了就没办法。
解决方案二:删除被刷设备上的ADB密钥。路径是/data/misc/adb/adb_keys,需要root权限才能删除。删除后重新连接会重新弹出授权窗口。
解决方案三:在Termux里手动指定ADB密钥。先生成一对密钥:
adb keygen ~/.android/adbkey然后把公钥文件~/.android/adbkey.pub的内容复制到被刷设备的/data/misc/adb/adb_keys文件里。这个方法需要被刷设备有root权限或者能进恢复模式。
注意:部分机型在Fastboot模式下不需要ADB授权,直接就能用Fastboot命令。所以如果ADB一直授权不了,可以试试进Fastboot模式操作。
5.2 Fastboot连接不到设备的排查思路
fastboot devices没有输出,这个问题比ADB unauthorized更棘手,因为它涉及硬件、驱动、协议多个层面。我的排查顺序是这样的:
第一步,确认OTG线是否支持数据传输。有些OTG线只能供电,不能传数据。换一根已知能传数据的线试试。
第二步,确认被刷设备是否真的在Fastboot模式。有些设备显示Fastboot界面但实际没有进入Fastboot协议,需要重新按键进入。
第三步,检查Termux的USB权限。运行lsusb看设备是否被识别。如果lsusb能看到但fastboot devices没输出,说明是Fastboot驱动的问题。
第四步,尝试用fastboot -l命令列出所有Fastboot设备。这个命令会显示更详细的设备信息,有助于判断问题出在哪一层。
第五步,如果以上都不行,换一部手机做主机试试。有些手机的OTG芯片对Fastboot协议支持不好,换一部手机可能就正常了。
5.3 刷机过程中断电或断连的应急处理
刷机过程中最怕的就是断电或者USB断连。如果发生在刷写boot或system分区时,设备大概率会变砖。但也不是完全没救。
如果设备还能进Fastboot模式,重新连接后继续刷写就行。Fastboot是幂等的,重复刷写同一个分区不会造成额外损害。
如果设备进不了Fastboot也进不了恢复模式,那就只能进入高通的EDL模式(9008模式)或者联发科的BROM模式来救砖。这两种模式需要专门的工具和驱动,不在本文讨论范围内。
预防措施比补救更重要。我一般建议:刷机前充满电,刷机过程中不要碰OTG线,不要切后台,不要接电话。Termux可以设置termux-wake-lock来防止系统休眠导致断连:
termux-wake-lock刷完之后再termux-wake-unlock释放。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 快速解决 |
|---|---|---|
| adb devices无输出 | USB调试未开 | 开发者选项里打开USB调试 |
| adb devices显示unauthorized | 未授权主机 | 被刷设备上点允许 |
| fastboot devices无输出 | OTG线不支持数据 | 换支持数据传输的OTG线 |
| fastboot flash FAILED | 分区空间不足 | 确认镜像对应机型 |
| 刷机后无法开机 | vbmeta验证失败 | 重刷vbmeta并禁用验证 |
| Termux提示permission denied | USB权限未授权 | 设置里给Termux USB权限 |
| 刷机过程中断连 | 供电不足或休眠 | 用带供电的OTG线,开wake-lock |
6. 进阶技巧与个人经验分享
6.1 用Termux脚本自动化刷机流程
如果你经常刷同一款机型,可以把刷机命令写成一个脚本,每次只需要运行脚本就行。比如创建一个flash.sh:
#!/data/data/com.termux/files/usr/bin/bash fastboot flash vbmeta vbmeta.img fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img fastboot reboot然后chmod +x flash.sh,以后刷机只需要./flash.sh。这个技巧在批量刷机的时候特别省事。我帮朋友刷同一款机型的时候,一次刷五台,用脚本比手动敲命令快得多。
6.2 ADB无线调试:摆脱OTG线的束缚
如果你的被刷设备还能正常开机,其实可以不用OTG线,直接用ADB无线调试。前提是两部手机在同一个局域网里。操作步骤:
- 被刷设备开启USB调试
- 用OTG线连接一次,执行
adb tcpip 5555 - 拔掉OTG线,执行
adb connect <被刷设备IP>:5555
这样就能无线执行ADB命令了。但Fastboot不支持无线,所以刷写分区还是得用OTG线。无线调试适合传文件、抓日志、截图这些日常操作。
我实测下来,无线调试的延迟在50ms左右,传小文件没问题,传大文件还是插线快。而且无线调试有个坑:设备重启后tcpip模式会失效,需要重新用线连接一次。
6.3 用ADB截图和录屏做刷机记录
刷机过程中记录每一步的操作和结果是个好习惯。ADB可以截图和录屏:
adb shell screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png录屏:
adb shell screenrecord /sdcard/record.mp4这些文件会保存在被刷设备的存储里,然后用adb pull拉到主机上。我一般会在刷机前截一张系统信息的图,刷机后再截一张,方便对比。
6.4 个人踩坑记录与避坑建议
第一个坑:OTG线买错了。我一开始买的是“OTG转接头”,结果发现它只支持U盘不支持手机。后来才知道,OTG转接头分“Host模式”和“Device模式”,刷机需要的是Host模式。买的时候一定要看清楚描述里有没有“支持ADB调试”或者“支持Fastboot”。
第二个坑:Termux版本太旧。Google Play版的Termux已经很久没更新了,很多新命令不支持。一定要用F-Droid版或者GitHub Releases版。
第三个坑:刷机包下错了。不同机型的刷机包不能混用,哪怕外观一模一样。我有一次把红米Note 8的包刷到了红米Note 8 Pro上,结果直接黑砖。所以刷机前一定要核对机型的代号,比如begonia是红米Note 8 Pro,ginkgo是红米Note 8,一字之差就是两台机器。
第四个坑:忘了关验证。部分机型刷完第三方ROM后需要额外刷入vbmeta来禁用验证启动,否则会卡在开机第一屏。这个步骤在刷机教程里经常被忽略,但却是最关键的一步。
第五个坑:刷机过程中接电话。这个听起来很蠢,但我真的遇到过。刷到一半来了个电话,系统切到通话界面,Termux被挂起,USB断连,结果刷了一半的system分区导致无法开机。所以刷机前开飞行模式,或者用另一部手机。
6.5 这套方案的局限性和替代方案
说了这么多优点,也得说说局限性。这套方案最大的问题是供电。手机OTG口的输出电流一般在500mA左右,如果被刷设备耗电量大,可能会出现供电不足导致刷机失败。解决办法是用带辅助供电的OTG线,或者用Y型线同时接电源。
另一个局限是Fastboot命令的兼容性。部分品牌的Fastboot实现和标准Fastboot有差异,比如三星的Odin模式、华为的Fastboot模式,命令参数都不一样。这种情况下还是得用官方的刷机工具。
替代方案方面,如果你有电脑,还是建议用电脑刷。电脑的USB控制器更稳定,驱动更完善,而且不用担心供电问题。手机OTG+ADB这套方案适合应急和便携场景,不适合作为主力刷机方案。
最后分享一个小技巧:如果你经常需要刷机,可以在Termux里装一个termux:widget,把常用的刷机命令做成桌面快捷方式。这样不用打开Termux就能一键执行刷机脚本,效率提升很明显。我现在的做法是把“进入Fastboot”“刷写boot”“刷写system”“重启”四个命令做成四个快捷方式,刷机的时候按顺序点一遍就行,比敲命令快多了。