当前位置: 首页 > 知识库问答 >
问题:

Android:让“su”在根深蒂固的AVD中工作,就像在真正根深蒂固的设备上工作一样?

易俊驰
2023-03-14

我正在为需要进入超级用户模式的根设备编写一个应用程序。我知道如何在实际的根设备上实现这一点,但当我在同样根设备的AVD中测试它时,“su”命令的行为方式与在实际设备上的行为方式不同。它将不允许非root用户“su”到root。。。AVD只允许root用户向非root用户su。

有人知道如何让下面的代码片段在Android仿真器中工作吗?

        // ... etc. ...

        Process process = null;

        try {
            // This works on a rooted device and fails within
            // the rooted AVD ...
            process = new ProcessBuilder("/system/xbin/su").start();
        }
        catch (Throwable t) {
            t.printStackTrace();
            return;
        }

        DataOutputStream  writer = new DataOutputStream(process.getOutputStream());
        InputStreamReader stream = new InputStreamReader(process.getInputStream());
        BufferedReader    reader = new BufferedReader(stream);

        try {
            writer.writeBytes("exec /system/bin/mount -o remount,rw /system\n");
            // Just in case the "exec" fails, above ...
            writer.writeBytes("exit 1\n");
            writer.close();
        }
        catch (Throwable t) {
            t.printStackTrace();
            return;
        }
        finally {
            try {
                reader.close();
            }
            catch (Throwable t) {
                // do nothing
            }
            try {
                stream.close();
            }
            catch (Throwable t) {
                // do nothing
            }
        }

        // ... etc. ...

这会失败,因为应用html" target="_blank">程序不是以root用户身份运行的,但在AVD中,/system/xbin/su命令仅在root用户调用时有效。下面的adb shell对话框说明了这一点(我正在连接到正在运行的AVD)。。。

% adb shell
root@generic:/ # ### we are now running as root
root@generic:/ # /system/xbin/su u0_a70
root@generic:/ $ ### this worked because "su" is invoked as root
root@generic:/ $ ### we are now running as user u0_a70
root@generic:/ $ /system/xbin/su root
su: uid 10070 not allowed to su
1|root@generic:/ $ ### this didn't work as a non-root user

有人知道如何让“su”命令在根深蒂固的AVD中工作,就像“su”在根深蒂固的设备中工作一样吗?

提前感谢。

PS:这是针对Android 4.4的。十、

共有1个答案

邵逸明
2023-03-14

不要使用stock Android emulator,使用GenyMotion并遵循本教程XDA链接

希望这对您有所帮助:)

 类似资料:
  • 通过使用adb将二进制文件复制到/data/local/tmp文件夹,我能够在多个非根Android设备上运行busybox二进制文件,尽管一些二进制文件由于权限问题(由于SELinux)无法工作。我没有对设备中任何其他文件夹的写入权限,但我可以使用/data/local/tmp/文件夹上的chmod对busybox进行写入和更改权限! 非根设备上的/data/local/tmp/文件夹有什么特殊

  • 这个小部件在模拟器4.1.2上工作得很好,当安装在真正的设备上时,它甚至不会显示在小部件列表上,就像安装了一样,但我不能让它正常工作。 下面是manifest.xml 和小部件提供程序

  • 我试图从我的localhost获取数据并将其打印在我的flutter应用程序中,问题是它在Android模拟器中完美工作,但它在我的物理设备中不工作,你能告诉我该怎么做才能使它在我的物理设备中工作?

  • 我有一个在Android上使用awk的程序。在一行中,我有一个命令 代码是不能更改的,它必须是那样的。问题是,当我在非根Android上运行脚本时,会出现以下错误: 有了根的Android,这个问题并不是没有发生。是不是非根的Android没有从line读取的权限,或者是其他原因?有谁能提出一个解决办法吗

  • 我不太清楚为什么会发生这种情况。我一直在做一些研究,但情况太模糊了,我甚至很难找到解决办法。 我使用Android Studio创建了一个应用程序,并一直在一个虚拟仿真器上运行,其中< code>Toast功能使用这两行简单的代码运行良好 但当我在手机上运行这个应用程序时,它一直死机。我有Galaxy Grand Prime,甚至不确定它是否重要。

  • 我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这