任何人都可以说,无论是adb
命令,可以通过我的Android应用程序来执行。 如果能够执行,如何能实现?
Answer 1:
你可以用这个做到这一点:
Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
不要忘了用try和catch语句围绕着它。
编辑:
@Phix是正确的, 的ProcessBuilder会更好用。
Answer 2:
普通Android应用程序有不同的权限来处理通过启动adb
,例如,通过流程开始adb
而正常的应用程序都没有被允许拍摄画面。 所以,你可以通过应用程序执行命令Runtime.getRuntime().exec()
但是,如果你已经从一个执行他们不会有相同的权限adb shell
。
Answer 3:
我碰到这个职位寻找一个不同的查询,但我已经有专门的工作input
在Android之前,所以我只想把一些清晰的问题。
之所以
Runtime.getRuntime().exec("adb shell input keyevent 120");
不工作,是因为你不删除
adb shell
在ADB
的部分是只为您的计算机上使用,如果你已经正确安装ADB,命令实际上是在您的计算机上adb.exe文件的路径,像这样
C:\XXXX\ADB Files\adb.exe shell
要么
C:\ XXXX \ ADB文件\亚行外壳
在shell
部分告诉您的计算机访问这些设备外壳上的亚行程序,让你的设备就不会知道什么是壳要么...
使用sh /path/to/commandList.sh
,因为它是一个shell脚本将执行commandList.sh列出的commads(Windows上的.batch文件是相似的)
你想使用的命令是
Runtime.getRuntime().exec("input keyevent 120");
然而,这将导致环境零和工作目录为空,你可以通过写命令shell脚本(sh文件),然后运行该脚本绕过这个
Runtime.getRuntime().exec("sh path/to/shellScript.sh");
有时, sh
是不需要的,我却用它只是柜面。
我希望这将清除至少东西了:)
Answer 4:
在调用Runtime.getRuntime调用ADB壳()。EXEC没有下壳用户运行。 它提供外壳,但具有相同的进程所有者的用户(如u0_a44)。 这是所有的命令没有工作的原因。
Answer 5:
执行
Runtime.getRuntime().exec("adb shell input keyevent 120");
我得到了以下错误:java.io.IOException异常:不能运行程序“亚行”:错误= 13,权限被拒绝。
执行
Runtime.getRuntime().exec("adb shell input keyevent 120");
有没有错误,但在同一时间,我的要求不被加工成采取截图。
我发现这是在早期版本的Android的工作,但后来它被删除。 虽然我不能在这里提供源,为什么它不工作。
希望这可以帮助我这样的人谁是试图用这种方式来采取截图时,应用程序是不是在前台。