我尝试从应用程序模拟器终端(您可以在Google Play中找到它)执行此命令,在此应用程序中,我写入su
并按回车键,因此写入:screenrecord --time-limit 10 /sdcard/MyVideo.mp4
并再次按下回车键,开始使用android kitkat的新功能录制屏幕。
所以我试着用下面的代码从java中执行相同的代码:
Process su = Runtime.getRuntime().exec("su");
Process execute = Runtime.getRuntime().exec("screenrecord --time-limit 10 /sdcard/MyVideo.mp4");
但不工作,因为该文件没有创建。显然,我运行在安装了Android Kitkat的根设备上。问题在哪里?我如何解决?因为从终端模拟器的作品,在Java中没有?
4条答案
按热度按时间fnx2tebb1#
您应该获取刚刚启动的
su
进程的标准输入,并在其中写下命令,否则您将使用当前的UID
运行命令。请尝试以下操作:
tvmytwxo2#
@CarloCannas对代码的修改:
(You欢迎为 outputStream.close() 找到更好的位置)
用法示例:
**更新:**要获得结果(输出到stdout),请用途:
静默关闭多个Closeables(Soсket may be no Closeable)的实用程序为:
r7knjye23#
5vf7fwbs4#
迟回复,但会对某人有利。你可以在
exec()
方法中使用sh
命令。下面是我的例子:首先调用
shell
,然后更改(设置)其中必要的环境,最后用它启动nginx。这也适用于无根设备。
你好。