`

Android的调试原理

阅读更多
一、adb的介绍:

  adb(Android Debug Bridge)包括三个部分:

  1)adb client, 运行在PC上(为DDMS,即IDE工作)

  2)adb daemon(守护进程), 运行于Emulator(为与Emulator中的VM交互工作);

  3)adb server(服务进程), 运行在PC(任务管理器上有),管理着adb client和adb daemon的通信.server与client通信的端口是是5037,

  adb server会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adb daemon连接为后面调试使用。

  PS:Emulator/Device占用两个(一组)端口,一个为偶数的5554,一个奇数的5555。

  如果还开启其他的Emulator,则使用的另一组端口是5556,5557,一直到5585.

  adb server开启时就是通过查找5555-5585之间端口来建立与模拟器的连接的,建立连接后就可以用adb的相关命令了。

  如果您安装了ADT就基本不需要adb的命令了(因为DDMS会调用ADB进行透明操作)

  关于本机的端口使用情况可以使用netstat [-a] [-n]来查询验证一下。

  二、观察一组数据:

  1,在开启仿真器时有一些打印:

  [2009-06-06 14:04:16 - Helloworld] Android Launch!

  [2009-06-06 14:04:17 - Helloworld] adb is running normally.

  [2009-06-06 14:04:17 - Helloworld] Performing com.android.hello.Helloworld activity launch

  [2009-06-06 14:04:17 - Helloworld] Automatic Target Mode: Preferred AVD 'lab' is not available. Launching new emulator.

  [2009-06-06 14:04:17 - Helloworld] Launching a new emulator with Virtual Device 'lab'

  [2009-06-06 14:04:24 - Helloworld] New emulator found: emulator-5554

  [2009-06-06 14:04:24 - Helloworld] Waiting for HOME ('android.process.acore') to be launched...

  [2009-06-06 14:05:45 - Helloworld] HOME is up on device 'emulator-5554'

  [2009-06-06 14:05:45 - Helloworld] Uploading Helloworld.apk onto device 'emulator-5554'

  [2009-06-06 14:05:45 - Helloworld] Installing Helloworld.apk...

  每一行都基本表示一个命令在执行,emulator-5554是仿真器的初始端口了。

  最后一句等于命令:adb -s emulator-5554 install helloworld.apk

  如果报了类似以下的错误,那得(加个-r)重装,因为该App已经在该Emulator下运行了

  DDM dispatch reg wait timeout

  Can't dispatch DDM chunk 52454151: no handler defined

  Can't dispatch DDM chunk 48454c4f: no handler defined

  网上没有看到这个错误因此顺便提下解决方法:adb -s emulator-5554 install -r helloworld.apk

  三,了解下DDMS:(都是adb的命令相当的功能)

  DDMS有几个界面:

  1)Devices:可以查看到当前运行的Emulator和其内运行的应用

  2)Emulator control,即仿真器的硬件设置项等:

  设置当前注册的网络状态(Home,Roaming,UnRegistered,Searching)

  数据业务的速度设置:有GSM,GPRS,EDGE,UMTS,HSDPA(3.5G?)

  还有载入KML或NMEA文件来模拟GPS数据

  3)还可以查询Threads,Heap,File Explorer、重启adb,抓屏等,其他都是在调用adb。

  4)关于Logcat

  从Windows->Prereference->android->DDMS->Loggin Level进行设置打印等级,

  不过默认下只打印入口线程的信息,射频和Tapi的动作信息要通过adb Logcat -b radio打开,

  os-events相关的打印通过adb logcat -b events.打开,

  Log默认被写入到手机的/data/anr/traces.txt文件中。

  四,Debug面板

  这个面板对于熟悉Eclipse的用户来说应该不用看了。

  通过以下三步将自己的应用或将已经跑起来的应用加入调试列表:

  1)选择Devices列表中Your app,

  2)选择臭虫按钮将该程序加载进调试状态

  3)OK,加断点吧。不过源代码要最新的否则断点不起作用。

  五、DDMS如何让IDE的调试工作起来呢?

  1)有几个组成:

  一个是adb(Android Debug Bridge)参考第一部分,它起到调试桥的作用;

  另一类是运行在Device/Emulator端的adb daemon, VM, debugger, your Applicatioin,

  通过下面句话就可以理解它们的关系:

一个App跑在一个进程中,这个进程又被一个VM绑定,都是一对一的,但VM与Emulator显然是多对一的,

  那调试时debugger从VM中拿到栈线程进程等信息,而daemon的作用仅仅是被DDMS用于建立一条连接(看下面)。

  最后一类则是运行在PC上的DDMS debugger;

  这个debugger是IDE的调试器,你可以改成另一个调试器;

  DDMS是Dalvik Debug Monitor Service,负责建立调试的作用,它仅有两个Service,其他的功能都是通过ADB client.让IDE与Emulator交互起来的。

  2)开启IDE时,DDMS会建立一个Device monitoring service用于监控Emulator,因为可以开启多个Emulator嘛;

  如果找到一个Emulator,那么DDMS才会再开启另一个Service叫VM Monitoring Sevice用于监控该Emulator下的VM; 第一部分提到adb有三个部分,其中的adb client可以多个实例的,DDMS的Service通过从ADB Client与ADb server的交互结果来维护自身的数据。

  如果VM Monitor找到Emulator的一个VM,那么DDMS会利用ADB获取目标VM的进程ID,

  同时通过client与daemon建立起与vm的debugger的新连接,注意新连接的交互端口是从8600开始的(n个的话端口是8659+n),这条新连接可以让DDMS获得与VM的实际交互。

  剩下的就是DDMS把拿到的数据再扔给ide 的 debugger(它们之间默认通过8700端口,可更改,因为与VM的交互端口从8600开始使用的话可能会不够的),

  这样IDE的Debug视图就能正确工作了.
分享到:
评论

相关推荐

    《Android Telephony原理解析与开发指南》_杨青平

    全书共10章,主要内容包括初识Android、搭建Android源代码编译调试环境、深入解析通话流程、详解Telecom、详解TeleService、Voice Call语音通话模型、ServiceState网络服务、Data Call移动数据业务、SMS & MMS业务...

    android系统原理及开发要点详解

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    Android 10.0 自动背光调节流程.pdf

    Android 10.0 自动背光调节流程.pdf

    Android调试

    Android 开发之使用Eclipse Debug调试详解 在Eclipse中一共有三种添加断点的方法 第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将会在你右键代码的哪一行添加一个程序断点 (同样的操作方可取消...

    《Android应用测试与调试实战》施懿民高清PDF完整版

    《Android应用测试与调试实战》高清完整版是Android应用测试与调试领域最为...三种Android应用开发方式所需要的测试和调试技术、方法进行了细致而深入的讲解,为Android应用的自动化测试和调试提供原理性的解决方案。

    android系统原理及开发要点详解_韩超_梁泉 4

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    深入Android应用开发 核心技术解析与最佳实践

    第12章针对商业应用的需要讲解了Android的调试、测试与性能优化;第13章全面地剖析了Android的编译系统,包括编译工具、映像文件编译、SDK编译、NDK编译和目标系统的配置等;第14章分析了Android系统的启动过程;第...

    android系统原理及开发要点详解_韩超_梁泉 1

     嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。  读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...

    rk3566-box-demo-android11-RTL8822CS调试

    rk3566-box-demo-android11-RTL8822CS调试

    Android应用测试与调试实战

    从测试和调试两个维度,针对采用Java、HTML 5、C++&NDK三种Android应用开发方式所需要的测试和调试技术、方法进行了细致而深入的讲解,为Android应用的自动化测试和调试提供原理性的解决方案。, 全书一共16章,分为...

    Android虚拟机调试器原理与实现

    作为android调试技术研究过程中的实验项目,AVMDBG功能尚不完善,开源出来仅供参考,如过有bug或其他疑问反馈欢迎提交issue。在讲解android动态调试实现之前,先回顾下针对apk进行动态调试常用的几种方法,比较下...

    android开发揭秘PDF

    2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4...

    Android实验指导.doc

    了解项目的基本文件目录结构 【原理】 Eclipse安装原理,Android编程方法 【过程】 1. 安装JAVA JDK 下载网址:java.sun./javase/downloads/ 2. 安装Eclipse 下载网址:.eclipse.org/downloads/ 3. 安装Android ...

    Android代码-一套完整有效的android组件化方案

    原理解释请参考文章Android彻底组件化方案实践 demo解读请参考文章Android彻底组件化demo发布 实现功能: 组件可以单独调试 组件之间通过接口 实现的方式进行数据传输 使用scheme和host路由的方式进行activity之间...

    android reverse tethering2.3

    ③确保【USB调试】已开启(MIUI4.0+开启方式:系统设置-开发者选项-USB调试开启);) j- p' s$ o* R5 } ④下载Android Reverse Tethering;+ T- N, s3 r, V h ⑤解压压缩包至PC任意位置,安装其中Tracetool service....

    Android逆向之动态调试技术

    深入介绍Android逆向原理和工具,实战实例

    Android应用开发与系统改造实战.王保卫等.源代码

    然后,讲解了AndroidNDK开发的方方面面,为了更好地开发出高质量的应用程序,详细讲解了Android调试技术,包括普通Android应用程序和NDK应用程序调试。  当然,为满足一些有着丰富应用程序开发经验的读者和对...

Global site tag (gtag.js) - Google Analytics