我的目标是编写一个可在手机上运行的应用程序,让用户从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)
问题是adb 客户端(用于与开发计算机上的设备进行通信的ADB 服务器进行通信的客户端)未打包在Android设备上。该adbd守护进程,但是,(所用之间的通信adb客户端和设备)可以并且将一个Android系统上找到。
有一些选项可帮助adb在Android设备上使用客户端:
adb从adbGitHub上的源代码尝试为Android设备构建客户端。adb“客户”。由于adb客户端和adbd守护程序通过USB或TCP进行通信,因此您可以尝试模拟通信协议以打开设备上的读/写流。更多关于客户端守护进程通信的协议在这里。我正在使用的该库可能会为您提供帮助:eviltak / adb-nmap快速而肮脏的选项是adb从源代码构建客户端并推送到设备。也就是说,如果您可以将其构建在Android设备上。
第二个选项可能是最耗时的,但它可能是最“干净”的选择。但是,您将必须模拟adb身份验证系统,正确处理流等,这可能很麻烦。消息来源将为您提供帮助。
无论哪种情况,GitHub adb源目录都应具备您所需要的一切。如果没有,那么,您必须自己弄清楚。
四年后...
我正在寻找同样的情况。
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+。
| 归档时间: |
|
| 查看次数: |
12067 次 |
| 最近记录: |