为什么 exec() 启动 ADB 守护进程?
Why does exec() start a ADB daemon?
我正在为我拥有的一些 root phones 构建一个应用程序。我想知道是否有任何方法可以从我的应用程序中卸载 phone 运行 一些代码附带的系统应用程序。
我已经通过 Runtime.getRuntime().exec()
从 phone 本身尝试了 运行 类似 adb shell pm clear COM.PACKAGE.NAME
的命令,但是命令的输出如下:
cannot bind 'tcp:5038
* Daemon not running. Starting it now on port 5038*
为什么?
ADB
服务器在您的主机 (Unix
, Windows
) 上启动,默认情况下绑定到端口 5037
。客户端(也是您的主机)使用该端口将命令发送到在系统环境中执行命令的目标设备。
参考:
- Android Debug Bridge 在
Android
开发者网站上。
- ADB(Android Debug Bridge): How it works? by Tetsuyuki Kobayashi
当您 运行 一个应用程序时,它的代码在环境中执行。因此,当您调用 Runtime.getRuntime().exec("adb shell command")
时,您实际做的是尝试启动另一个 adb
服务器进程(现在在目标设备上),该进程在 tcp
端口 5038
上启动,因为端口 5037
很忙。
总结一下:您不需要将 adb
参数传递给 exec()
方法,这是多余的。而是使用
Runtime.getRuntime().exec("command")
关于以编程方式卸载系统应用程序,您的应用程序必须首先获得 su
,这超出了问题的范围。不过,以下链接可能会帮助您开始:
- ANDROID: How to gain root access in an Android application?
- execute shell command from android
我正在为我拥有的一些 root phones 构建一个应用程序。我想知道是否有任何方法可以从我的应用程序中卸载 phone 运行 一些代码附带的系统应用程序。
我已经通过 Runtime.getRuntime().exec()
从 phone 本身尝试了 运行 类似 adb shell pm clear COM.PACKAGE.NAME
的命令,但是命令的输出如下:
cannot bind 'tcp:5038
* Daemon not running. Starting it now on port 5038*
为什么?
ADB
服务器在您的主机 (Unix
, Windows
) 上启动,默认情况下绑定到端口 5037
。客户端(也是您的主机)使用该端口将命令发送到在系统环境中执行命令的目标设备。
参考:
- Android Debug Bridge 在
Android
开发者网站上。 - ADB(Android Debug Bridge): How it works? by Tetsuyuki Kobayashi
当您 运行 一个应用程序时,它的代码在环境中执行。因此,当您调用 Runtime.getRuntime().exec("adb shell command")
时,您实际做的是尝试启动另一个 adb
服务器进程(现在在目标设备上),该进程在 tcp
端口 5038
上启动,因为端口 5037
很忙。
总结一下:您不需要将 adb
参数传递给 exec()
方法,这是多余的。而是使用
Runtime.getRuntime().exec("command")
关于以编程方式卸载系统应用程序,您的应用程序必须首先获得 su
,这超出了问题的范围。不过,以下链接可能会帮助您开始:
- ANDROID: How to gain root access in an Android application?
- execute shell command from android