Android系统之adb

一.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的so
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有头发的猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值