在设备本身上运行adb,即就像PC在发出命令一样

Car*_*ley 5 android adb

我的目标是编写一个可在手机上运行的应用程序,让用户从APK列表中进行选择,然后将所选的应用程序安装到同一网络上的Android Things设备上。

我们实际上会忘记Android Things,因为相同的代码可以在两部手机之间工作,只是没有意义,因为目标可以通过其他多种方式(例如附件,BT等)接收APK。AT设备仅具有用于除了最近发布的Android Things Console,它对于常规的本地开发来说已经过时了。因此,我希望从手机本身复制PC进行安装的顺序,即“ adb connect,adb install ...”等。我们可以假设所有涉及的设备都已植根。

在我看来,这意味着我的应用程序必须作为一个过程发出这些命令,但是我很难使它完全正常工作。当我发出“ adb帮助”时,我会获得帮助消息,而当我发出“ adb重新启动”时,设备将重新启动,所以我认为我的做法正确。在这种情况下,我尝试进行任何其他尝试都无法获得任何回报-“ adb shell ping -c 1 192.168.62.40”的示例失败,但是从PC上的ADB可以。同样,这很好奇“ adb版本”失败,从终端再次可以。

起初我以为手机可能只安装了“ adb lite”,足以使它们作为adb目标工作,但使用PC的外壳显示情况并非如此。

这是我正在尝试的代码:

Process process = Runtime.getRuntime().exec("su adb help");
//Process process = Runtime.getRuntime().exec("su adb reboot");
//Process process = Runtime.getRuntime().exec("su adb version");   
//Process process = Runtime.getRuntime().exec("su adb shell ping -c 1 192.168.62.40");
process.waitFor();

Log.d("PROCESS", "Status: "+process.exitValue());
BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(process.getInputStream()));

StringBuilder everything = new StringBuilder();
String line;
while( (line = bufferedReader.readLine()) != null) {
    everything.append(line);
}

Log.d("PROCESS", "Process output: "+everything.toString());

Toast.makeText(MainActivity.this, everything.toString(), Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)

Evi*_*Tak 7

问题是adb 客户端(用于与开发计算机上的设备进行通信的ADB 服务器进行通信的客户端)未打包在Android设备上。该adbd守护进程,但是,(所用之间的通信adb客户端和设备)可以并且将一个Android系统上找到。

有一些选项可帮助adb在Android设备上使用客户端:

  • adbadbGitHub上源代码尝试为Android设备构建客户端。
  • 尝试做一个临时的adb“客户”。由于adb客户端和adbd守护程序通过USB或TCP进行通信,因此您可以尝试模拟通信协议以打开设备上的读/写流。更多关于客户端守护进程通信的协议在这里。我正在使用的该库可能会为您提供帮助:eviltak / adb-nmap

快速而肮脏的选项是adb从源代码构建客户端并推送到设备。也就是说,如果您可以将其构建在Android设备上。

第二个选项可能是最耗时的,但它可能是最“干净”的选择。但是,您将必须模拟adb身份验证系统,正确处理流等,这可能很麻烦。消息来源将为您提供帮助。

无论哪种情况,GitHub adb源目录都应具备您所需要的一切。如果没有,那么,您必须自己弄清楚。


use*_*667 5

四年后...

我正在寻找同样的情况。

Adb 需要网络连接,因为它是客户端-服务器连接,其中 Android 设备是服务器,计算机是客户端。

要解决此问题,您需要 Termux(带有包管理器的 Android 终端)和本地 VPN(例如 Netguard)。不需要根访问权限。

在 Termux 中,您可以安装本机 Android 版本,其adb步骤 1 是apt install android-tools. 但 adb 应该与设备本身建立网络连接。那么 VPN 就很有用了。VPN 在本地运行,设备充当 VPN 服务器,例如用于 Netguard 等广告拦截。然后,您的设备将获得具有另一个 IP 地址的另一个网络,例如 Netguard 使用 10.1.10.1,我将其用作示例(您的 VPN 可能会发出不同的地址)。运行adb connect 10.1.10.1 设备可能会提示(仅一次)“允许来自计算机的连接..blabla...”并同意这一点。然后运行adb connect 10.1.10.1:5555就可以连接了。现在,无论在设备本身上还是通过 SSH 连接,都可以从 Termux 命令 shell 运行 adb 命令。

注意:重启后仍需要插入 USB,除非您有 Android 11+。