为什么exec()启动一个ADB守护进程?

时间:2015-12-05 11:08:28

标签: android shell adb runtime.exec

我正在为我拥有的一些有根电话构建应用。我想知道是否有任何方法可以卸载系统应用程序,该应用程序随手机运行我的应用程序中的一些代码。

我尝试通过adb shell pm clear COM.PACKAGE.NAME从手机本身运行Runtime.getRuntime().exec()等命令,但命令输出如下:

cannot bind 'tcp:5038

* Daemon not running. Starting it now on port 5038*

为什么?

1 个答案:

答案 0 :(得分:0)

ADB服务器在您的主机(UnixWindows)上启动,默认情况下绑定到端口5037。客户端(也是您的主机)使用该端口将命令发送到在系统环境中执行命令的目标设备。

<强>参考

  1. Android Debug BridgeAndroid开发者网站上。
  2. ADB(Android Debug Bridge): How it works? Tetsuyuki Kobayashi
  3. 运行应用程序时,其代码将在环境中执行。因此,当您调用Runtime.getRuntime().exec("adb shell command")时,您实际执行的操作是尝试启动另一个adb服务器进程(现在在目标设备上),该进程从tcp端口5038开始,因为端口{ {1}}很忙。

    总结一下:您不需要将5037参数传递给adb方法,这是多余的。而是使用

    exec()

    关于以编程方式卸载系统应用,您的应用必须首先获得Runtime.getRuntime().exec("command") ,这超出了问题的范围。虽然,以下链接可能会帮助您开始:

    1. ANDROID: How to gain root access in an Android application?
    2. execute shell command from android