【问题标题】:Cannot run program "adb": error=13, Permission denied无法运行程序“adb”:错误=13,权限被拒绝
【发布时间】:2024-01-08 13:23:01
【问题描述】:

我有一个程序,它必须只执行一个命令

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Runtime.getRuntime().exec("adb shell input tap 0 0")
    }
}

但是我遇到了一个错误

Process: com.example.tomfo.pokerclicker, PID: 11578
java.io.IOException: Cannot run program "adb": error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
    at java.lang.Runtime.exec(Runtime.java:695)
    at java.lang.Runtime.exec(Runtime.java:525)
    at java.lang.Runtime.exec(Runtime.java:422)
    at com.example.tomfo.pokerclicker.MainActivity$onCreate$1.run(MainActivity.kt:14)
    at java.util.TimerThread.mainLoop(Timer.java:562)
    at java.util.TimerThread.run(Timer.java:512)
 Caused by: java.io.IOException: error=13, Permission denied
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
    at java.lang.ProcessImpl.start(ProcessImpl.java:132)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    at java.lang.Runtime.exec(Runtime.java:695) 
    at java.lang.Runtime.exec(Runtime.java:525) 
    at java.lang.Runtime.exec(Runtime.java:422) 
    at com.example.tomfo.pokerclicker.MainActivity$onCreate$1.run(MainActivity.kt:14) 
    at java.util.TimerThread.mainLoop(Timer.java:562) 
    at java.util.TimerThread.run(Timer.java:512) 

虽然我已经将 adb 添加到 Windows 上的属性中,并且可以运行 abd 命令 throw Android Studio 控制台(但在 Android Studio 控制台中命令不是绿色的)。如何解决这个问题呢?此命令正在运行 throw Studio 控制台命令

【问题讨论】:

  • 您从哪里执行此代码?通过模拟器还是您的设备?
  • 来自我的模拟器
  • 你输入adb root并重启模拟器了吗?然后adb -e shell?
  • 是的,没用
  • 你对那个adbx的权限吗?

标签: java android kotlin adb


【解决方案1】:

adb 是您在计算机上使用的工具,“adb shell”在设备(或模拟器)上打开一个 shell,“adb shell command”在其上运行命令。

因此,如果您想在设备上以编程方式运行命令,只需删除“adb shell”即可:

Runtime.getRuntime().exec("input tap 0 0")

【讨论】:

  • @Cédric LE MOING 我按照你对命令adb shell wm overscan", "0,0,0,-220 的回答,但它所做的唯一一件事就是阻止出现错误 13 异常的消息,它没有执行任何操作