`

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底层原理课件(500强内部)

    同时,讲解了如何使用AVD(Android Virtual Device)模拟器进行应用调试,以及Gradle构建系统的使用方法。 第二章《Android基础知识》:深入讲解了Android系统架构,包括Linux内核、HAL(硬件抽象层)、System ...

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

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

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

    《Android系统原理与开发要点详解》是一份深入探讨Android操作系统核心机制及...通过学习,开发者不仅能掌握Android应用开发的基本技能,还能深入了解系统内部工作原理,从而在遇到问题时能更有效地进行调试和优化。

    Android系统原理与开发要点详解_培训课件.rar

    关于调试,Android Studio提供了强大的调试工具,如Logcat用于查看日志输出,模拟器或真机设备用于测试,以及性能分析工具帮助优化代码。 最后,了解Android的版本更新和兼容性问题也非常重要。随着系统版本的迭代...

    Android系统原理及开发要点详解pdf

    《Android系统原理及开发要点详解》是一本深入探讨Android操作系统核心机制和开发实践的重要参考资料。本书旨在帮助读者全面理解Android的内部运作,并掌握在这一平台上进行高效应用开发的关键技巧。 一、Android...

    Android系统原理及开发要点详解–1.pdf 高清下载

    - 调试和性能优化:了解如何使用Logcat进行日志记录,以及如何使用Android Profiler等工具进行性能监控和分析。 3. Android系统原理深入: - Linux内核机制:包括进程管理、内存管理、电源管理和驱动模型。 - ...

    android资料,运行原理过程

    本资料包"android资料,运行原理过程"专注于揭示Android系统的运行机制和开发流程。 一、Android系统运行过程 1. 启动流程:Android系统的启动始于Bootloader,接着是Kernel加载,然后是System Server启动,最后是...

    深入理解Android Telephony原理剖析与最佳实践

    《深入理解Android Telephony原理剖析与最佳实践》一书,主要针对的是Android系统中的电话服务模块(Telephony)进行深入的解析和实践经验分享,对于想要涉足Android Framework开发的初学者来说,是一本不可多得的...

    《Android系统原理及开发要点详解》PDF版本下载.txt

    - **ADB (Android Debug Bridge)**:调试和测试工具。 ### Android开发要点 #### 1. UI设计 - **Material Design**:Google推出的UI设计语言,强调简洁、直观的设计风格。 - **自适应布局**:支持不同屏幕尺寸和...

    Android 调试背光亮度曲线-斜线

    总的来说,"Android调试背光亮度曲线-斜线"是一个涉及硬件、驱动程序和系统服务深度交互的过程,需要扎实的Android开发基础和对底层系统原理的深入理解。通过这样的调试,不仅可以提升用户满意度,还可以帮助优化...

    Android系统原理与开发要点详解_培训课件

    10. **Android系统的开发综述**(02_Android系统的开发综述.pdf):为开发者提供了Android应用开发的整体视角,包括SDK工具、IDE集成、调试技巧以及发布流程。 通过学习这些内容,开发者可以对Android系统有深入的...

    Android串口调试助手源码

    【Android串口调试助手源码】...通过深入学习和理解这份源码,开发者不仅可以掌握Android串口通信的基本原理和实践,还能学习到Android应用开发中的各种技巧和最佳实践,对于提升个人技能和解决实际问题具有很大价值。

    Android底层驱动原理

    本文将深入探讨Android底层驱动的工作原理、重要性以及如何进行开发。 一、底层驱动概述 1. 定义:底层驱动,也称为设备驱动程序,是运行在操作系统内核层的一段代码,它的主要职责是解析并执行来自上层应用程序或...

    Android系统原理与开发

    《Android系统原理与开发》是一本面向初学者的详尽指南,旨在深入解析Android开发的各个方面,帮助读者从零开始掌握这一广泛使用的移动操作系统。在深入探讨之前,我们需要理解几个核心概念:Android内核、系统架构...

    Android系统原理及开发要点详解 - [韩超.梁泉].pdf

    - **Android Studio**:官方推荐的集成开发环境(IDE),集成了强大的代码编辑器、调试器和模拟器等功能。 - **SDK**:软件开发工具包,包含了构建和测试Android应用所需的各种工具。 - **NDK**:原生开发工具包,...

    android系统启动原理

    Android系统启动原理是一个复杂而有序的过程,涉及到操作系统内核、硬件初始化、系统服务启动、用户界面呈现等多个层面。本文将全面、系统地解析这一过程,旨在帮助读者深入理解Android系统的运行机制。 首先,...

    Android开发工具及其原理

    ### Android开发工具及其原理 #### 一、Android Application基本概念 Android应用程序主要由一系列组件构成,其中最常见的组件是Activity。Activity可以理解为Windows系统中的窗口,用于与用户进行交互。以下是一...

    Android调试

    在Android开发过程中,调试是必不可少的一个环节,它能帮助开发者找出...总之,熟练掌握Android调试技巧,包括断点的合理设置、真机调试的连接以及日志的使用,能够极大地提高开发效率,及时发现和修复程序中的问题。

    Android系统原理及开发要点详解电子书

    《Android系统原理及开发要点详解》是一本深入探讨Android操作系统核心机制与开发实践的专业书籍。本书旨在帮助读者从底层理解Android系统,掌握Android应用开发的关键技术,并提供丰富的实践指导。 在Android系统...

Global site tag (gtag.js) - Google Analytics