Autox.js 中文文档 下载 App

Autox.js 截屏权限无响应 黑屏 或 一直转圈的解决办法

图像识别全挂了?先查截屏权限

图像识别和 OCR 的前提是 captureScreen() 能拿到有效图片。如果截屏失败,后面全部白搭。

常见症状与排查

症状 1:requestScreenCapture() 没反应

调用后什么都不弹、或者弹窗点了允许但脚本还是说失败。

排查步骤:

  1. 是新版本吗:v7.2.3 之前的版本截屏权限有不少 bug,先升级到 v7.2.3+
  2. 试试 Legacy 方式:v7.2.3 新增了不跳出 App 的旧方式
   if (!images.requestScreenCaptureLegacy()) {
       toast("截屏权限请求失败");
       exit();
   }
  1. 手动授予:系统设置 → 应用权限 → Autox.js → 找到"截屏"权限,手动允许
  2. 某些 ROM 有限制:MIUI/ColorOS 对截屏权限有额外限制,去设置里搜"截屏权限"看看有没有单独开关

症状 2:截屏后图片是黑的

成功拿到图片但内容全黑。

原因与解决:

原因解决
屏幕被锁屏了截屏只能截亮屏状态
正在播放 DRM 加密视频系统层面禁止截屏(防盗版),无解
某些全屏 App / 游戏部分全屏渲染的 App 拒绝被截屏
Android 系统限制某些版本截屏有延迟,sleep 一下再截
// 截屏前确保屏幕亮着
if (!device.isScreenOn()) {
    device.wakeUp();
    sleep(500);
}

// 截屏
let img = captureScreen();
if (img) {
    // 检查是不是全黑
    let avgBrightness = images.getSimilarity(img, images.createImg(1, 1, "#000000"));
    if (avgBrightness < 0.01) {
        toast("截屏结果全黑,请检查屏幕状态");
    }
}

症状 3:截屏一直转圈 / 无响应

可能是截图服务挂了。v7.2.3 有相关的修复:

// 主动释放截图服务,重新申请
images.stopScreenCapture();
sleep(500);

if (!requestScreenCapture()) {
    toast("重新申请也失败了");
    exit();
}

症状 4:截屏后 App 崩溃或内存泄漏

v7.2.3 修复了 debug 模式下 ResourceMonitor 导致的内存泄漏和截屏服务内存泄漏。升级是首选。

截屏服务的生命周期

理解截屏权限的行为能帮你少踩坑:

行为权限状态
App 首次调用 requestScreenCapture()系统弹窗 → 用户点允许 → 授权生效
第二次调用(同一 App 未卸载)不弹窗,直接授权
App 被卸载或数据被清除权限重置,下次要重新授权
用户在系统设置里手动撤销下次调用会重新弹窗
Android 11+ 某些机型可能每次都弹窗,需要手动选"总是允许"

实战:健壮的截屏初始化

console.show();

function initScreenCapture() {
    // 先尝试正常方式
    if (requestScreenCapture()) {
        console.log("截屏权限已获取");
        return true;
    }
    
    console.log("正常方式失败,尝试 Legacy...");
    
    // v7.2.3+ 尝试 Legacy 方式
    if (typeof images.requestScreenCaptureLegacy === "function") {
        if (images.requestScreenCaptureLegacy()) {
            console.log("Legacy 方式获取成功");
            return true;
        }
    }
    
    console.error("所有方式都失败,尝试 stop 后重试");
    
    // stop 后重试
    try { images.stopScreenCapture(); } catch (e) {}
    sleep(500);
    
    if (requestScreenCapture()) {
        console.log("重试成功");
        return true;
    }
    
    // 最后手段:引导用户手动设置
    toast("请手动授予截屏权限");
    app.startActivity({
        action: "android.settings.CAPTURE_POLICY_SETTINGS"
    });
    return false;
}

if (!initScreenCapture()) {
    exit("截屏权限初始化失败");
}

截屏成功后的使用

let img = captureScreen();
if (img) {
    try {
        // 使用 img...
    } finally {
        img.recycle();  // 一定要释放内存
    }
} else {
    console.error("captureScreen 返回 null");
}

总结

问题最快修复
权限不弹升级 v7.2.3+;用 Legacy 方式
截屏全黑确保屏幕亮着;检查是否 DRM 加密
内存泄漏升级 v7.2.3;用完必 .recycle()
每次都弹权限Android 11+ 限制,手动选"总是允许"