Android Root 完全指南

从 Bootloader 到 Magisk,彻底搞懂手机 Root

December 17, 2024·7 min read·Yimin
#Android#Root#Magisk#自动化

本文带你彻底搞懂 Android Root 的原理,以及为什么某些自动化场景需要 Root 权限。

🎯 为什么需要 Root?

真实场景

使用 AI 自动化工具操控手机时,某些 APP 会检测到"模拟点击"并拒绝响应:

⚠️ 检测到疑似使用模拟点击
请关闭相关软件后重试

为什么会被检测到?


ADB 点击的两种方式

┌────────────────────────────────────────┐
│          点击方式对比                   │
├────────────────────────────────────────┤
│                                        │
│  方式1: input tap (无需 Root)          │
│  ┌──────────────────────────────────┐ │
│  │ adb shell input tap 500 800     │ │
│  │           ↓                      │ │
│  │ Android InputManager 服务        │ │
│  │           ↓                      │ │
│  │ 应用收到点击 ❌ 可被检测          │ │
│  └──────────────────────────────────┘ │
│                                        │
│  方式2: sendevent (需要 Root)          │
│  ┌──────────────────────────────────┐ │
│  │ sendevent /dev/input/event4 ... │ │
│  │           ↓                      │ │
│  │ 直接写入触摸屏设备                │ │
│  │           ↓                      │ │
│  │ 应用收到点击 ✅ 像真人触摸        │ │
│  └──────────────────────────────────┘ │
│                                        │
└────────────────────────────────────────┘

关键区别

  • input tap:通过系统服务转发,会被标记为"非真实触摸"
  • sendevent:直接写入触摸屏设备,和手指触摸一模一样

但是,sendevent 需要写入 /dev/input/eventX,这需要 Root 权限


🔐 什么是 Root?

Root 是 Android(Linux)系统的最高权限用户:

用户权限能做什么
普通用户受限只能操作自己的文件
Shell 用户有限ADB 默认权限
Root无限可以做任何事
# 普通 ADB Shell
$ adb shell id
uid=2000(shell)  ← 不是 root

# 有 Root 权限后
$ adb shell su -c id
uid=0(root) ← 最高权限!

Root 能做什么?

能力示例
访问系统文件修改 /system 分区
控制硬件直接写入触摸屏设备
修改系统设置更改隐藏的系统配置
安装系统级模块Xposed、LSPosed 等

🚪 什么是 Bootloader?

手机的"门卫"

Bootloader 是手机开机时最先运行的程序,它决定加载什么系统。

┌────────────────────────────────────────┐
│            手机启动流程                 │
├────────────────────────────────────────┤
│                                        │
│  ① 按电源键                            │
│       ↓                                │
│  ② Bootloader 启动                     │
│     "检查要启动什么..."                 │
│       ↓                                │
│  ③ 验证系统签名                        │
│     "系统是官方的吗?"                  │
│       ↓                                │
│  ④ 启动 Android                        │
│                                        │
└────────────────────────────────────────┘

为什么要解锁?

状态限制
🔒 锁定只能启动官方签名的系统
🔓 解锁可以刷入任何系统/镜像

类比

  • 锁定 = 只能用官方钥匙开门
  • 解锁 = 可以配自己的钥匙

如何检查解锁状态?

# 重启到 Fastboot 模式
adb reboot bootloader

# 检查解锁状态
fastboot getvar unlocked
# unlocked: yes ← 已解锁
# unlocked: no  ← 未解锁

如何解锁?

不同品牌方法不同:

品牌解锁方式
小米官网申请,7天等待期
一加开发者选项直接解锁
Google PixelFastboot 命令解锁
其他可能需要第三方工具

🎭 Magisk 是什么?

现代 Root 方案

Magisk 是目前最流行的 Root 工具,由 topjohnwu 开发。

┌────────────────────────────────────────┐
│           Magisk 的工作原理             │
├────────────────────────────────────────┤
│                                        │
│  传统 Root (不推荐)                     │
│  ┌──────────────────────────────────┐ │
│  │ 直接修改 /system 分区            │ │
│  │     ↓                            │ │
│  │ 系统检测到被篡改 ❌               │ │
│  │ 某些APP拒绝运行 ❌                │ │
│  └──────────────────────────────────┘ │
│                                        │
│  Magisk (推荐) ✅                       │
│  ┌──────────────────────────────────┐ │
│  │ 只修改 boot/init_boot 分区       │ │
│  │     ↓                            │ │
│  │ /system 保持不变                 │ │
│  │     ↓                            │ │
│  │ 启动时"临时"挂载 Root           │ │
│  │     ↓                            │ │
│  │ 可以隐藏 Root 状态               │ │
│  └──────────────────────────────────┘ │
│                                        │
└────────────────────────────────────────┘

Magisk 的优势

特性说明
🔓 Root 管理提供 su 命令
🙈 隐藏 Root敏感APP正常使用
📦 模块系统扩展系统功能
✅ 不改 /system不触发检测
🔄 OTA 友好系统更新后可恢复

📦 boot.img vs init_boot.img

Android 版本差异

不同 Android 版本,Root 需要修补的文件不同:

Android 版本需要修补的文件
Android 12 及以下boot.img
Android 13+init_boot.img

为什么 Android 13 变了?

Google 把启动相关的 ramdisk 从 boot.img 移到了单独的 init_boot.img

┌────────────────────────────────────────┐
│     Android 12 vs Android 13+          │
├────────────────────────────────────────┤
│                                        │
│  Android 12:                           │
│  ┌────────────────┐                   │
│  │   boot.img     │ ← Magisk 修补这个 │
│  │  • kernel      │                   │
│  │  • ramdisk     │                   │
│  └────────────────┘                   │
│                                        │
│  Android 13+:                          │
│  ┌────────────────┐ ┌──────────────┐ │
│  │   boot.img     │ │ init_boot.img│ │
│  │  • kernel      │ │  • ramdisk   │ │
│  └────────────────┘ └──────────────┘ │
│                       ↑               │
│              Magisk 修补这个           │
│                                        │
└────────────────────────────────────────┘

如何判断?

# 检查 Android 版本
adb shell getprop ro.build.version.release
# 输出: 15 ← Android 15

# 检查是否有 init_boot 分区
adb shell ls /dev/block/by-name/ | grep init_boot
# init_boot_a ← 存在,用 init_boot.img
# init_boot_b

🛠️ 完整 Root 流程

准备工作

  1. ✅ 官方刷机包(包含 boot.imginit_boot.img
  2. ✅ 手机已解锁 Bootloader
  3. ✅ 电脑安装 ADB 和 Fastboot

步骤详解

┌────────────────────────────────────────┐
│            Root 完整流程               │
├────────────────────────────────────────┤
│                                        │
│  ① 获取原版镜像                        │
│     从刷机包提取 init_boot.img         │
│              ↓                         │
│  ② 传输到手机                          │
│     adb push init_boot.img /sdcard/    │
│              ↓                         │
│  ③ 安装 Magisk APP                     │
│     adb install Magisk.apk             │
│              ↓                         │
│  ④ 修补镜像                            │
│     在 Magisk 中选择修补文件            │
│              ↓                         │
│  ⑤ 取回修补后的文件                    │
│     adb pull /sdcard/Download/         │
│          magisk_patched_xxx.img        │
│              ↓                         │
│  ⑥ 刷入修补后的镜像                    │
│     fastboot flash init_boot_a xxx.img │
│              ↓                         │
│  ⑦ 重启并授权                          │
│     打开 Magisk 授权 Shell              │
│              ↓                         │
│  ✅ Root 成功!                         │
│                                        │
└────────────────────────────────────────┘

验证 Root

# 测试 su 命令
adb shell su -c id

# 成功输出:
uid=0(root) gid=0(root) context=u:r:magisk:s0

🎮 实战:使用 sendevent 模拟真实触摸

有了 Root,就可以用 sendevent 模拟真实触摸:

# 获取触摸屏设备
adb shell getevent -pl | grep -A5 "event"
# /dev/input/event4 ← 触摸屏

# 用 sendevent 发送点击事件
adb shell su -c "
sendevent /dev/input/event4 3 57 0 &&
sendevent /dev/input/event4 3 53 500 &&
sendevent /dev/input/event4 3 54 800 &&
sendevent /dev/input/event4 1 330 1 &&
sendevent /dev/input/event4 0 0 0 &&
sendevent /dev/input/event4 3 57 -1 &&
sendevent /dev/input/event4 1 330 0 &&
sendevent /dev/input/event4 0 0 0
"

sendevent 参数说明

参数含义
3 57 0设置触摸 ID
3 53 500X 坐标 = 500
3 54 800Y 坐标 = 800
1 330 1触摸按下
0 0 0同步事件
3 57 -1释放触摸 ID
1 330 0触摸抬起

⚠️ 注意事项

解锁 Bootloader 的风险

风险说明
📱 数据清除解锁会清空所有数据
🔓 安全性降低手机丢失后更容易被破解
📵 可能失去保修部分厂商会失去保修

Root 的风险

风险说明
🦠 恶意软件Root 后恶意软件危害更大
💥 变砖操作不当可能无法开机
🏦 部分APP某些APP检测Root后拒绝运行

📊 总结

┌────────────────────────────────────────┐
│            核心概念总结                 │
├────────────────────────────────────────┤
│                                        │
│  Root                                  │
│  └─ Android 最高权限                   │
│  └─ 可以访问系统任何文件               │
│  └─ 可以执行任何命令                   │
│                                        │
│  Bootloader                            │
│  └─ 手机启动时的"门卫"                 │
│  └─ 决定能不能刷入非官方系统           │
│  └─ 必须先解锁才能刷 Magisk            │
│                                        │
│  Magisk                                │
│  └─ 现代 Root 方案                     │
│  └─ 不修改 /system,更安全             │
│  └─ 可以隐藏 Root 状态                 │
│                                        │
│  init_boot.img                         │
│  └─ Android 13+ 的新分区               │
│  └─ Magisk 需要修补这个文件            │
│                                        │
└────────────────────────────────────────┘

📚 扩展阅读


本文基于 Android 15 + Magisk v28.1 实践

Android Root 完全指南