是否可以通过我的Android应用程序执行adb命令?

Raj*_*mar 30 android adb

谁能说,是否adb可以通过我的Android应用程序执行命令.如果可以执行,如何实现?

Ahm*_*mad 26

你可以这样做:

Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
Run Code Online (Sandbox Code Playgroud)

不要忘记用try和catch语句包围它.

编辑:

@Phix是对的,ProcessBuilder会更好用.

  • `Runtime.getRuntime()`已被搁置.http://stackoverflow.com/questions/7069425/is-there-an-alternative-to-runtime-getruntime-exec (4认同)
  • 我正在尝试运行"adb shell input keyevent KEYCODE_BACK"但它不起作用.你能帮帮我吗?谢谢 (3认同)
  • @HeitorColangelo对不起男人 - 自从我这么做以后已经有一段时间了,现在还不记得了:/ / (2认同)

小智 14

普通的Android应用程序对通过启动的进程具有不同的权限adb,例如,通过启动的进程adb被允许捕获屏幕而普通的应用程序则不允许.因此,您可以通过应用程序从您的应用程序执行命令Runtime.getRuntime().exec(),但它们不具有与您执行的命令相同的权限adb shell.

  • 你能说出你拥有的不同特权吗?任何来源? (2认同)

小智 5

我在寻找不同的查询时遇到了这篇文章,但我input之前专门在 Android 上工作过,所以我想澄清一下这个问题。

之所以

Runtime.getRuntime().exec("adb shell input keyevent 120");    
Run Code Online (Sandbox Code Playgroud)

不起作用,是因为您没有删除

adb shell   
Run Code Online (Sandbox Code Playgroud)

ADB部分仅在您的计算机上使用,如果您错误地安装了 ADB,该命令实际上是您计算机上 adb.exe 文件的路径,如下所示

C:\XXXX\ADB Files\adb.exe shell    
Run Code Online (Sandbox Code Playgroud)


C:\XXXX\ADB Files\adb shell

shell部分告诉您计算机上的 ADB 程序访问设备 shell,因此您的设备也不知道 shell 是什么......

使用sh /path/to/commandList.sh将执行 commandList.sh 中列出的命令,因为它是一个 shell 脚本(Windows 上的 .batch 文件类似)

您要使用的命令是

Runtime.getRuntime().exec("input keyevent 120");     
Run Code Online (Sandbox Code Playgroud)

但是,这将导致环境为空且工作目录为空,您可以通过将命令写入 shell 脚本( .sh 文件)然后运行该脚本来绕过此问题

Runtime.getRuntime().exec("sh path/to/shellScript.sh");   
Run Code Online (Sandbox Code Playgroud)

有时sh不需要,但我使用它只是为了以防万一。

我希望这至少能澄清一些事情:)