• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            原文地址:http://hi.baidu.com/chocolly/blog/item/91d68f99210abc006f068c63.html/cmtid/b11822ce4bfae234b700c84d
            /* 今天學習了用Eclipse 來調試Android的代碼,首次使用,可能有的問題很基本,有問題請指出,交流嘛:) */
            (筆記中提到的Emulator也可以理解成Device)
            一、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視圖就能正確工作了.

            posted on 2010-06-08 18:28 漂漂 閱讀(959) 評論(0)  編輯 收藏 引用 所屬分類: android 開發
            91秦先生久久久久久久| 东京热TOKYO综合久久精品| 久久精品国产精品亚洲| 亚洲国产日韩欧美久久| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲va中文字幕无码久久不卡| 国产精品久久久天天影视| 日日狠狠久久偷偷色综合免费| 人妻精品久久久久中文字幕69| 99久久成人18免费网站| 国产成人无码精品久久久性色| 久久精品人人槡人妻人人玩AV| 久久综合色区| 亚洲午夜精品久久久久久人妖| 久久人做人爽一区二区三区| 日本精品久久久久中文字幕8| 久久无码中文字幕东京热| 国产日产久久高清欧美一区| 亚洲欧美国产日韩综合久久| 国产精品欧美久久久天天影视| 狠狠色丁香婷婷久久综合五月| 亚洲国产天堂久久综合网站| 久久亚洲美女精品国产精品| 2021国内精品久久久久久影院| 爱做久久久久久| 久久精品国产69国产精品亚洲| 亚洲欧洲日产国码无码久久99| 亚洲人成无码久久电影网站| 国产福利电影一区二区三区久久老子无码午夜伦不 | 蜜臀久久99精品久久久久久小说 | 91精品国产色综合久久| 77777亚洲午夜久久多喷| 亚洲国产成人久久综合一区77 | 国产精品久久一区二区三区| 亚洲精品乱码久久久久久中文字幕 | 亚洲国产精品久久66| 久久天堂电影网| 日本道色综合久久影院| 日本一区精品久久久久影院| 久久精品一区二区| 伊人丁香狠狠色综合久久|