minadbd: Setup ADB over network (TCP/IP and VirtIO VSOCK)
* Adds alternative way to use ADB sideload on devices without USB gadget mode
* Code taken from android-15.0.0_r5 packages/modules/adb/daemon/main.cpp
Change-Id: Ibef04214de79c991a863daef727979598050cc46
diff --git a/minadbd/Android.bp b/minadbd/Android.bp
index e96d130..ddc0bb3 100644
--- a/minadbd/Android.bp
+++ b/minadbd/Android.bp
@@ -100,6 +100,7 @@
"android.hardware.health-V3-ndk", // from librecovery_utils
"libbase",
"libcrypto",
+ "libssl",
],
static_libs: [
diff --git a/minadbd/minadbd.cpp b/minadbd/minadbd.cpp
index 4fab0f4..e31d2fd 100644
--- a/minadbd/minadbd.cpp
+++ b/minadbd/minadbd.cpp
@@ -23,6 +23,8 @@
#include <android-base/logging.h>
#include <android-base/parseint.h>
+#include <android-base/properties.h>
+#include <android-base/strings.h>
#include "adb.h"
#include "adb_auth.h"
@@ -33,6 +35,22 @@
using namespace std::string_literals;
+static void minadbd_net_init() {
+ std::string prop_port = android::base::GetProperty("service.adb.tcp.port", "");
+
+ int port;
+ if (sscanf(prop_port.c_str(), "%d", &port) == 1 && port > 0) {
+ LOG(DEBUG) << "using tcp port=" << std::to_string(port);
+ // Listen on TCP and VSOCK port specified by service.adb.tcp.port property.
+ local_init(android::base::StringPrintf("tcp:%d", port));
+ local_init(android::base::StringPrintf("vsock:%d", port));
+ } else {
+ // Listen on default port.
+ local_init(android::base::StringPrintf("tcp:%d", DEFAULT_ADB_LOCAL_TRANSPORT_PORT));
+ local_init(android::base::StringPrintf("vsock:%d", DEFAULT_ADB_LOCAL_TRANSPORT_PORT));
+ }
+}
+
int main(int argc, char** argv) {
android::base::InitLogging(argv, &android::base::StderrLogger);
// TODO(xunchang) implement a command parser
@@ -68,6 +86,8 @@
usb_init();
+ minadbd_net_init();
+
VLOG(ADB) << "Event loop starting";
fdevent_loop();