AutoJs6 权限管理 — 各类权限申请与说明
权限总览
AutoJs6 基于 Android 无障碍服务实现核心功能,但不同功能模块还需要额外的系统权限。下表列出全部权限及其用途:
| 权限 | 触发时机 | 必需性 | 说明 |
|---|---|---|---|
| 无障碍服务 | 首次开启自动化 | ⭐⭐⭐ 必需 | 所有自动化能力的基础 |
| 悬浮窗 | 开启浮动按钮 | ⭐⭐⭐ 必需 | 显示浮动按钮和自定义悬浮窗 |
| 通知权限 | Android 13+ 通知 | ⭐⭐ 推荐 | 发送脚本完成通知等 |
| 前台服务 | 运行长时脚本 | ⭐⭐ 推荐 | 防止系统后台清理 |
| 所有文件访问 | 读写外部存储 | ⭐⭐ 推荐 | Android 11+ 分区存储下使用 |
| 屏幕捕获 | 截图(captureScreen) | ⭐⭐ 推荐 | 首次截图时弹窗授权 |
| 录音 | 语音识别功能 | ⭐ 可选 | 语音输入场景 |
| Shizuku | app.launchDual 等 | ⭐ 可选 | ADB 授权获取系统特权 |
| Root Shell | su 命令执行 | ⭐ 可选 | 已 Root 设备上的高级功能 |
各版本差异
Android 7-10(API 24-29)
权限模型较宽松。大部分权限可在应用首次使用时弹窗申请,或在设置中手动开启。
Android 11(API 30)分区存储
Android 11 引入 Scoped Storage。访问外部存储文件(如 /sdcard/Download/)需要:
- 方法一:申请「所有文件访问权限」(主页抽屉快捷开关)
- 方法二:通过 SAF(Storage Access Framework)选择具体目录
// Android 11+ 申请所有文件访问权限
// 主页抽屉 → 「所有文件管理权限」开关
// 或脚本中跳转设置页
files.requestAllFilesAccess();
Android 12+(API 31)前台服务类型
从 Android 12 开始,前台服务需要声明具体类型。AutoJs6 会在以下场景自动处理:
- 屏幕捕获前台服务(截图)
- 无障碍服务辅助前台服务(长时自动化)
- 媒体播放前台服务(音频录制)
Android 13+(API 33)通知权限
从 Android 13 开始,发送通知需要运行时权限。AutoJs6 首次发送通知时会自动申请 POST_NOTIFICATIONS 权限。
// 主动申请通知权限
if (!notice.canNotify()) {
notice.requestPermission();
}
Shizuku 授权流程
Shizuku 不是传统的 APK 权限,而是通过 ADB 连接建立的特权通道:
- 在电脑上执行 ADB 命令启动 Shizuku 服务:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
- 手机上打开 Shizuku Manager 应用,确认服务运行中
- 在 AutoJs6 中打开 Shizuku 支持开关
- 授权成功后即可使用高级 API
Shizuku Manager 的安装和启动命令会随 Shizuku 版本变化,以其官方文档为准。
权限诊断
当脚本因为权限问题报错时,可以用以下方法排查:
// 检查无障碍服务状态
console.log("无障碍服务: " + (auto.state ? "已开启" : "未开启"));
// 检查 Shizuku 状态
console.log("Shizuku 服务: " + (shizuku.state ? "已授权" : "未授权"));
// 检查文件访问权限
console.log("所有文件访问: " + (files.hasAllFilesAccess() ? "已授权" : "未授权"));
// 检查屏幕捕获权限
console.log("屏幕捕获: " + (images.canCaptureScreen() ? "已授权" : "未授权"));
// 通知权限
console.log("通知: " + (notice.canNotify() ? "已授权" : "未授权"));
注意事项
- 权限只在首次使用时申请,拒绝后需手动到系统设置中重新开启
- 部分国产 ROM(MIUI、ColorOS、EMUI)会额外收紧权限管控,可能需要手动将 AutoJs6 加入白名单
- 不要把权限申请逻辑硬编码在脚本中让用户反复授权,通常只需要授权一次