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

是否可以通过我的android应用程序执行adb命令?,android,adb,Android,Adb,谁能说,我的android应用程序是否可以执行adb命令。如果可以执行,如何实现?您可以使用以下命令执行: Process process = Runtime.getRuntime().exec("your command"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); 别忘了用try-and-catch语句来围绕它 编辑: @Phi

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

您可以使用以下命令执行:

Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
别忘了用try-and-catch语句来围绕它

编辑:


@Phix是对的,最好使用。

普通Android应用程序对通过
adb
启动的进程具有不同的权限,例如,通过
adb
启动的进程可以捕获屏幕,而普通应用程序则不能。因此,您可以通过
Runtime.getRuntime().exec()
从应用程序中执行命令,但它们的权限与您从运行时调用的
adb shell执行命令的权限不同。getRuntime().exec没有在shell用户下运行。它提供shell,但具有相同的进程所有者用户(如u0_a44)。这就是所有命令都不起作用的原因。

正在执行

Runtime.getRuntime().exec("adb shell input keyevent 120");
我得到了以下错误: java.io.IOException:无法运行程序“adb”:错误=13,权限被拒绝

执行

Runtime.getRuntime().exec("adb shell input keyevent 120");
没有错误,但同时,我的请求未被处理以获取屏幕截图

我发现这在早期版本的android中是有效的,但后来它被删除了。虽然我无法提供它不起作用的原因


希望这能帮助像我这样的人,当应用程序不在前台时,尝试使用这种方法拍摄屏幕截图。

我看到这篇文章是为了寻找一个不同的查询,但我以前在android上专门使用过
input
,所以我想澄清一下这件事

原因是什么

Runtime.getRuntime().exec("adb shell input keyevent 120");    
不起作用,是因为您没有删除

adb shell   
ADB
部分仅在您的计算机上使用,如果您未正确安装ADB,则该命令实际上是计算机上ADB.exe文件的路径,如下所示

C:\XXXX\ADB Files\adb.exe shell    

C:\XXXX\ADB文件\ADB外壳

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

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

要使用的命令是

Runtime.getRuntime().exec("input keyevent 120");     
但是,这将导致环境为空和工作目录为空,您可以通过将命令写入shell脚本(.sh文件),然后使用

Runtime.getRuntime().exec("sh path/to/shellScript.sh");   
有时不需要
sh
,但我只是以防万一


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

这就是我在Kotlin所做的,我也得到了命令响应

fun runShellCommand(command: String) {
    // Run the command
    val process = Runtime.getRuntime().exec(command)
    val bufferedReader = BufferedReader(
        InputStreamReader(process.inputStream)
    )

    // Grab the results
    val log = StringBuilder()
    var line: String?
    line = bufferedReader.readLine()
    while (line != null) {
        log.append(line + "\n")
        line = bufferedReader.readLine()
    }
    val Reader = BufferedReader(
        InputStreamReader(process.errorStream)
    )

    // if we had an error during ex we get here
    val error_log = StringBuilder()
    var error_line: String?
    error_line = Reader.readLine()
    while (error_line != null) {
        error_log.append(error_line + "\n")
        error_line = Reader.readLine()
    }
    if (error_log.toString() != "")
        Log.info("ADB_COMMAND", "command : $command $log error $error_log")
    else
        Log.info("ADB_COMMAND", "command : $command $log")
}


Runtime.getRuntime()
已被搁置。即使设备没有通过USB连接,它也能执行adb命令吗?我正在尝试运行“adb shell input keyevent KEYCODE\u BACK”,但它不起作用。你能帮我吗?感谢you@HeitorColangelo抱歉,伙计-我已经有一段时间没有这样做了,现在真的什么都不记得了:/I'm get Cannot run program”“:error=13,权限被拒绝:(你找到在设备上运行adb的方法了吗?我只收到一条消息:错误:在设备上直接运行adb时未找到设备。你能告诉我你有什么不同的特权吗?任何来源?我有这个问题@Anthea,所以很有趣?如果你想使用这个工具,别忘了自动将权限添加到你的android清单中
androi。)d、 permission.DUMP
Hi,它在没有adb shell的情况下运行,但并非所有命令都能运行。简单的命令,如swipe、keyevent,在系统中使用adb shell时不会显示任何效果。知道吗?