Android系统之adb

本文详细介绍了Android的ADB(Android Debug Bridge)工具,包括基本介绍、架构分析和启动流程。ADB由adb服务(adbd)和客户端组成,运行在PC和Android设备上。在Android源码中,adb和adbd的编译过程被阐述,强调了adbd的启动流程,特别是连接建立过程中的认证机制,涉及到公钥和私钥的交互。通过改变特定参数,可以实现私有ADB连接的定制。
摘要由CSDN通过智能技术生成

一.ADB 基本介绍

adb(Android Debug Bridge)是在嵌入式软件调试测试中经常使用到的一个工具,它是一个命令行工具,我们可以通过它与仿真器或连接的Android设备进行通信。在android sdk/platform中可以找到ADB工具,或者下载ADB Kits
在这里插入图片描述

二.ADB 基本架构

Adb 源代码位于 源码根目录 system/core/adb
在这里插入图片描述
adbadb server是运行在PC端,
adb就是大家所熟悉的控制台命令adb
adb server是由adb fork出的一个常驻后台的子进程
在这里插入图片描述
adbd运行在Android端,在/system/bin/adbd
通过Android.bp脚本去编译
adbd:

cc_defaults {
    name: "adbd_defaults",
...
    cflags: ["-UADB_HOST", "-DADB_HOST=0"],
...  
}
cc_binary {
name: "adbd",
defaults: ["adbd_defaults", "host_adbd_supported"],
    ...
    srcs: [
        "daemon/main.cpp",
    ],
    .....
}

adb:

cc_binary_host {
name: "adb",
defaults: ["adb_defaults"],
cc_defaults {
    name: "adb_defaults",
    cflags: [
        ...
        "-DADB_HOST=1",         // overridden by adbd_defaults
        "-DALLOW_ADBD_ROOT=0",  // overridden by adbd_defaults
    ],
   ....
}

1. 这里可以看到cc_binary 用于编译adbd ,cc_binary_host 用于编译adb,后面加入了host关键字都是用来编译PC上的可执行程序,
2. 这需要注意的是 ADB_HOST , Android.bp中通过 cflags标签中
-UADB_HOST 取消之前宏定义,-DADB_HOST=1定义一个宏,并给宏赋值

三.启动流程

首先我们看看adbd的启动流程,
adbd时序图:
在这里插入图片描述
adb 时序图
在这里插入图片描述
从上面可以看到 adb 模块功能其实也非常多,我们平时最主要的修改可能就是需要做一个私有的 adb 连接,让其他人的 adb 无法连接我们的设备,必须使用我们指定的 adb 才能连接,因此我们这里之讲解 adbadbd的建立连接大致过程
可以看到在adbdabd的执行顺序中,都调用了transport.cpp这个类中的 init_transport_registration(); 后面我们主要就讲解这个函数
我们首先看到adbd的启动大致流程,看到代码:
首先是 是在rcstart adbd,看到如下代码:
system/core/rootdir/init_usb.rc

//adbd 服务在 /system/bin/adbd , 
-- 后面接参数 root_seclabel=u:r:su:s0 
service adbd /system/bin/adbd --root_seclabel=u:r:su:s0
//给adbd 指定一个类属,便于管理stop core.
class core
//创建一个adbd的socket,这个socket主要是与PC端通信
socket adbd seqpacket 660 system system
//默认不启动,必须通过start启动
Disabled
//selinux的label
seclabel u:r:adbd:s0
//on 后面接触发器,当触发器触发,这进行下面的操作。类似与程序中的判断语句。
on property:sys.usb.config=adb && property:sys.usb.configfs=0
....
//启动adbd service
    start adbd
    setprop sys.usb.state ${sys.usb.config}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有头发的猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值