您好,欢迎访问三七文档
ADB简述目录1.概述...........................................................................................................................................22.ADB架构.................................................................................................................................22.1.ADB各模块定义.........................................................................................................22.2.adbd(ADBdaemon)................................................................................................32.2.1.启动流程...........................................................................................................42.3.adbserver......................................................................................................................62.3.1.启动流程...........................................................................................................62.4.adbclient.......................................................................................................................62.5.DDMS...........................................................................................................................92.6.Jdwp............................................................................................................................103.ADB通信..............................................................................................................................113.1.adbclient--adbserver.............................................................................................113.2.adbserver--adbd.....................................................................................................113.2.1.Transport.........................................................................................................113.2.2.协议.................................................................................................................134.ADB源代码分析相关网络资源.............................................................................................145.ADB命令...............................................................................................................................145.1.使用adb命令.............................................................................................................145.2.执行Shell命令..........................................................................................................185.3.使用logcat查看日志.................................................................................................195.4.停止adb服务.............................................................................................................221.概述AndroidDebugBridge(adb)是一个android开发人员必会的多功能的调试工具,如它的名字一样,它在开发者和目标机器之间,架起了一座bridge。adb的用法很简单,只要看完SDK文档关于ADB的部分,(android-sdk-linux_86/docs/guide/developing/tools/adb.html),再稍加练习,基本上就满上就能很熟练的使用了。adb源码位置是:system/core/adb.2.ADB架构adb由两个物理文件组成:adb/adb.exe运行于PC端,包括Linux、Windows、MacOS等系统之中,通常是x86架构上(下文中,ADB指整个模块,而adb单独指这一部分);adbd运行于Android设备的底层Linux之中,ARMv5架构上。构建不同文件,通过传入Android.mk的$(BUILD_SIMULATOR)变量是否为真。源码中由ADB_HOST宏用来区分本地主机(adb)和目标机(adbd)。区分不同OS,通过传入Android.mk的$(HOST_OS)。它的有效取值包括linux、darwin、freebsd和windows。不同平台的主要差异是USB的控制方法和文件路径。2.1.ADB各模块定义adbserver:计算机上的一个服务进程,进程名为adbadbd(adbdaemon):Android手机上的一个服务进程,进程名为adbdadbclient:你可以认为是计算机上的一个终端窗口,进程名也为adbDDMS:DalvikDebugMonitorServiceJdwp:JavaDebugWireProtocoladb整体架构和数据传输图如下:DDMS和Jdwp不做多的了解。只看adb模块,如下图:system/core/adb/OVERVIEW.txt文件中对它们的关系进行了描述。system/core/adb/protocol.txt和OVERVIEW.txt描述了各模块之间通信协作的协议格式。2.2.adbd(ADBdaemon)运行于device/emulator的守护进程(Localservice)。其作用如下:1,用来连接device/emulator和adbserver,device通过USB连接,emulator通过TCP连接。2,为device/emulator提供服务--adbservice(adb服务,注意与adb服务端的区别)的概念,指adbd提供的功能。在emulator/device端,adbd也创建localsocket和remotesocket,前者与通过jdwp与dalvikVM进层通信,后者通过TCP/USB与adbserver通信。2.2.1.启动流程adbd在init.rc中启动。1,adbdmain:adb.cmain()intmain(intargc,char**argv){adb_trace_init();#ifADB_HOSTadb_sysdeps_init();returnadb_commandline(argc-1,argv+1);//运行PC端,用于命令发送#elseif((argc1)&&(!strcmp(argv[1],recovery))){adb_device_banner=recovery;//recover模式recovery_mode=1;}start_device_log();returnadb_main(0,DEFAULT_ADB_PORT);//运行于emulator/device上,用于命令接收及反馈。如果执行命令“serviceadbd”它将会被执行。#endif}2,adb_main()Adbd创建两个socket,一个用来控制连接,一个用来连接adbserver。在该函数中初始化jdwp用来使adbd和jvm之间的交互,就是说adbd能够发送消息给app和接收app来自的消息(包括event、data等)。在init_transport_registration函数中调用adb_socketpair。2.3.adbserver是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。在HOST端,adb会fork(通过命令:“adbfork-serverserver”,见代码adb.c中的launch_server函数)出一个守护进程(Hostservice),即server(给用户的调用接口是adbstart-server),而父进程继续处理client请求,所有的client通过TCP端口号5037进行与server通信,而server创建localsocket与remotesocket,前者用于和client通信,后者用与远端(adbd)进行通信,emulator通过TCP,realdevice则通过usb。这个守护进程长期运行于后台,没有控制台界面,称之为adbserver(adb服务端),其主要工作有两部分:a,管理PC中的Android模拟器,以及通过USB线连接到PC的Android设备,负责维持运行于其中的adbd进程与自身的数据通道;b,实现PC与设备/模拟器之间的数据拷贝。2.3.1.启动流程adbserver由adbclient启动。2.4.adbclient运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。提供给用户的命令行工具,对用户暴露了install、push、shell等接口,与用户交互,称之为adbclient(adb
本文标题:adb相关知识介绍
链接地址:https://www.777doc.com/doc-6265411 .html