Android 4.4 如何添加局域网ADB调试流程

需求:在我们开发过程中,如果通过usb线不能调试,那么只能通过局域网adb来调试。
代码路径:
system/core/adb/adb.c
system/core/adb/services.c
external/sepolicy/property_contexts
system/core/init/property_service.c
frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java
在adb.c文件中adb_main方法获取该属性的端口值:service.adb.tcp.port

int adb_main(int is_daemon, int server_port)
{
     property_get("service.adb.tcp.port", value, "");
    if (!value[0]) {
        property_get("persist.adb.tcp.port", value, "");
    }
    if (sscanf(value, "%d", &port) == 1 && port > 0) {
        printf("using port=%d\n", port);
        local_init(port);
    } else if (!usb) {
        local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
    }

    D("adb_main(): pre init_jdwp()\n");
    init_jdwp();
    D("adb_main(): post init_jdwp()\n");
}

在property_service.c文件中property_perms数组中给该service.adb.tcp.port属性添加权限

struct {
    const char *prefix;
    unsigned int uid;
    unsigned int gid;
} property_perms[] = {
    { "net.rmnet0.",      AID_RADIO,    0 },
    { "service.adb.tcp.port", AID_SHELL,    0 },
        { NULL, 0, 0 }
};

在property_service.c文件中restart_tcp_service方法和restart_usb_service方法中

void restart_tcp_service(int fd, void *cookie)
{
    char buf[100];
    char value[PROPERTY_VALUE_MAX];
    int port = (int)cookie;

    if (port <= 0) {
        snprintf(buf, sizeof(buf), "invalid port\n");
        writex(fd, buf, strlen(buf));
        adb_close(fd);
        return;
    }

    snprintf(value, sizeof(value), "%d", port);
    property_set("service.adb.tcp.port", value);
    snprintf(buf, sizeof(buf), "restarting in TCP mode port: %d\n", port);
    writex(fd, buf, strlen(buf));
    adb_close(fd);
}

void restart_usb_service(int fd, void *cookie)
{
    char buf[100];

    property_set("service.adb.tcp.port", "0");
    snprintf(buf, sizeof(buf), "restarting in USB mode\n");
    writex(fd, buf, strlen(buf));
    adb_close(fd);
}

在property_contexts文件中service.adb.tcp.port给该属性变量添加selinux权限

debug.                  u:object_r:shell_prop:s0
log.                    u:object_r:shell_prop:s0
service.adb.root        u:object_r:shell_prop:s0
service.adb.tcp.port    u:object_r:shell_prop:s0

在UsbDebuggingActivity.java文件中usb 调试授权默认开启,不弹出对话框选择

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) {
        mDisconnectedReceiver = new UsbDisconnectedReceiver(this);
    }
}

使用操作如下所示:

service.adb.tcp.port=5555
adb connect 192.168.0.158:5555
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值