You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用代码中获取root权限失败的问题求助

解决App内获取Root权限失败问题

先确认App是否真的能获取Root权限

虽然adb shell下su能拿到root,但App内执行su可能因为授权未通过或路径问题没拿到权限,先做验证:

Process process = null;
try {
    // 先通过adb shell执行`which su`获取su的绝对路径,替换下面的路径
    process = Runtime.getRuntime().exec("/system/bin/su");
    // 执行id命令验证是否为root
    OutputStream os = process.getOutputStream();
    os.write("id\n".getBytes());
    os.flush();
    os.close();

    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        // 输出结果包含uid=0(root)则说明已获取root权限
        android.util.Log.d("RootDebug", line);
    }
    reader.close();
    int exitCode = process.waitFor();
    android.util.Log.d("RootDebug", "su exit code: " + exitCode);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (process != null) {
        process.destroy();
    }
}

如果日志里没有uid=0,说明App没拿到授权:

  • 检查Magisk等Root管理器是否给App授权,可设置永久授权
  • 确保App在前台时请求Root权限,避免后台授权弹窗被系统拦截

排查FridaInjector初始化失败原因

报错在FridaInjector.Builder构造方法,说明它内部的Root权限检查未通过:

  1. 验证frida-inject的可执行权限
    在adb shell执行:
su -c chmod +x /你的App私有目录/frida-inject
su -c /你的App私有目录/frida-inject --version

如果无法执行,先给frida-inject添加可执行权限,确保root用户能正常调用它。

  1. 指定su绝对路径给FridaInjector
    如果FridaInjector内部默认的su路径不对,尝试修改初始化逻辑,确保它使用你通过which su查到的绝对路径(比如给Builder添加设置su路径的方法,或修改源码里的su命令路径)。

  2. 调整FridaInjector的权限检查逻辑
    查看FridaInjector源码第179行的权限检查逻辑,比如是否额外校验了系统签名(你没有系统签名,这会导致失败),移除这类无关检查,只保留核心的Root权限验证(比如通过执行id命令判断uid是否为0)。

其他注意事项

  • 部分Root环境需要用su -c直接包裹命令执行,确保操作在Root上下文
  • 尽量在Activity前台触发Root权限请求,避免Service等后台组件首次启动时因弹窗拦截导致授权失败

内容的提问来源于stack exchange,提问作者kenshin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:39:53