EtchDroid 中文文档 下载 App

无需 root 的写入原理——Android API 是怎么做到的

为什么其他刻录 APP 大多需要 root

在 EtchDroid 出现之前,Android 上也有不少镜像刻录工具。它们几乎都需要 root 权限,原因很简单——

向 USB 设备的原始扇区写入数据,在传统的 Linux 权限模型里属于特权操作,需要访问 /dev/block/sdX 这样的块设备节点。普通应用没有权限直接写这些节点。

EtchDroid 走的是 Android USB Host API

EtchDroid 的核心技巧是避开 Linux 原始块设备,走 Android USB Host Framework。这套 API 从 Android 3.1(API 12)开始提供,允许应用在用户显式授权的前提下,通过 USB 接口与外设进行通信。

具体来说:

  1. 手机作为 USB Host,U 盘作为 USB Device
  2. EtchDroid 通过 UsbManager 获取 USB 设备列表
  3. 用户点击授权对话框后,EtchDroid 拿到 USB 连接句柄
  4. 通过 USB Mass Storage Class 协议直接读写 U 盘的扇区

整个过程完全在 Android 沙箱内完成,不碰任何需要 root 的 Linux 系统调用。

底层用的是什么库

EtchDroid 在底层使用了 libaums(Android USB Mass Storage Library),这是一个 Java/Kotlin 实现的 USB MSC 协议栈。v1.4 版本之后,它进一步切换到了 libusb,对各种 USB 设备的兼容性和稳定性都有明显提升——这也是为什么 v1.4 之后用户普遍反馈"以前用不了的 U 盘现在能用了"。

为什么仍然存在兼容性边界

虽然走的是 Android 官方 API,但 EtchDroid 依然有一些硬限制:

这些都不是 EtchDroid 的 bug,而是 Android USB Host API 和硬件本身的边界。