首页 > Java > java教程 > 为什么在 Java 和模拟器终端中执行'su”命令不同?

为什么在 Java 和模拟器终端中执行'su”命令不同?

Patricia Arquette
发布: 2024-11-19 09:51:03
原创
498 人浏览过

Why Does Executing

从 Android 执行 Shell 命令:常见陷阱分析

在 Android 开发中,可能会出现需要执行 shell 命令的情况。然而,当尝试从 Java 应用程序中执行此类命令时,可能会出现常见的陷阱。使用“su”命令可以观察到这样一个陷阱,该命令在 root 设备中授予超级用户权限。

考虑使用 screenrecord 命令进行屏幕捕获的场景。当通过应用程序模拟器终端执行该命令时,该命令成功启动记录。但是,使用 Runtime.getRuntime().exec() 方法从 Java 执行相同的命令无法创建记录。

差异是由将命令传递给“su”进程的方法引起的。模拟器终端允许直接输入命令,而在 Java 中,命令必须通过其标准输入作为“su”进程的输入提供。

解决方案包括将命令重定向到“su”进程的使用 DataOutputStream 的标准输入。下面是修改后的代码片段:

try{
    Process su = Runtime.getRuntime().exec("su");
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

    outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n");
    outputStream.flush();

    outputStream.writeBytes("exit\n");
    outputStream.flush();
    su.waitFor();
}catch(IOException e){
    throw new Exception(e);
}catch(InterruptedException e){
    throw new Exception(e);
}
登录后复制

通过将命令重定向到标准输入,“su”进程接收命令并使用root权限提升它,成功执行屏幕录制。该技术确保可以从 Android 应用程序有效执行 shell 命令,甚至需要超级用户权限。

以上是为什么在 Java 和模拟器终端中执行'su”命令不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板