• <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>

            life02

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              197 隨筆 :: 3 文章 :: 37 評(píng)論 :: 0 Trackbacks
            /* 今天學(xué)習(xí)了用Eclipse 來(lái)調(diào)試Android的代碼,首次使用,可能有的問(wèn)題很基本,有問(wèn)題請(qǐng)指出,交流嘛:) */
            (筆記中提到的Emulator也可以理解成Device)
            一、adb的介紹:
            adb(Android Debug Bridge)包括三個(gè)部分:
            1)adb client, 運(yùn)行在PC上(為DDMS,即IDE工作)
            2)adb daemon(守護(hù)進(jìn)程), 運(yùn)行于Emulator(為與Emulator中的VM交互工作);
            3)adb server(服務(wù)進(jìn)程), 運(yùn)行在PC(任務(wù)管理器上有),管理著adb client和adb daemon的通信.server與client通信的端口是是5037,
            adb server會(huì)與emulator交互的,使用的端口有兩個(gè),一個(gè)是5554專(zhuān)門(mén)用于與Emulator實(shí)例的連接,那么數(shù)據(jù)可以從Emulator轉(zhuǎn)發(fā)給IDE控制臺(tái)了,另一個(gè)則是5555,專(zhuān)門(mén)與adb daemon連接為后面調(diào)試使用。

            PS:Emulator/Device占用兩個(gè)(一組)端口,一個(gè)為偶數(shù)的5554,一個(gè)奇數(shù)的5555。
            如果還開(kāi)啟其他的Emulator,則使用的另一組端口是5556,5557,一直到5585.
            adb server開(kāi)啟時(shí)就是通過(guò)查找5555-5585之間端口來(lái)建立與模擬器的連接的,建立連接后就可以用adb的相關(guān)命令了。
            如果您安裝了ADT就基本不需要adb的命令了(因?yàn)镈DMS會(huì)調(diào)用ADB進(jìn)行透明操作)

            關(guān)于本機(jī)的端口使用情況可以使用netstat [-a] [-n]來(lái)查詢(xún)驗(yàn)證一下。

            二、觀察一組數(shù)據(jù):
            1,在開(kāi)啟仿真器時(shí)有一些打印:
            [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...
            每一行都基本表示一個(gè)命令在執(zhí)行,emulator-5554是仿真器的初始端口了。
            最后一句等于命令:adb -s emulator-5554 install helloworld.apk
            如果報(bào)了類(lèi)似以下的錯(cuò)誤,那得(加個(gè)-r)重裝,因?yàn)樵揂pp已經(jīng)在該Emulator下運(yùn)行了
            DDM dispatch reg wait timeout
            Can't dispatch DDM chunk 52454151: no handler defined
            Can't dispatch DDM chunk 48454c4f: no handler defined
            網(wǎng)上沒(méi)有看到這個(gè)錯(cuò)誤因此順便提下解決方法:adb -s emulator-5554 install -r helloworld.apk

            三,了解下DDMS:(都是adb的命令相當(dāng)?shù)墓δ?
            DDMS有幾個(gè)界面:
            1)Devices:可以查看到當(dāng)前運(yùn)行的Emulator和其內(nèi)運(yùn)行的應(yīng)用
            2)Emulator control,即仿真器的硬件設(shè)置項(xiàng)等:
               設(shè)置當(dāng)前注冊(cè)的網(wǎng)絡(luò)狀態(tài)(Home,Roaming,UnRegistered,Searching)
               數(shù)據(jù)業(yè)務(wù)的速度設(shè)置:有GSM,GPRS,EDGE,UMTS,HSDPA(3.5G?)
               還有載入KML或NMEA文件來(lái)模擬GPS數(shù)據(jù)
            3)還可以查詢(xún)Threads,Heap,File Explorer、重啟adb,抓屏等,其他都是在調(diào)用adb。

            4)關(guān)于Logcat
            從Windows->Prereference->android->DDMS->Loggin Level進(jìn)行設(shè)置打印等級(jí),
            不過(guò)默認(rèn)下只打印入口線(xiàn)程的信息,射頻和Tapi的動(dòng)作信息要通過(guò)adb Logcat -b radio打開(kāi),
            os-events相關(guān)的打印通過(guò)adb logcat -b events.打開(kāi),
            Log默認(rèn)被寫(xiě)入到手機(jī)的/data/anr/traces.txt文件中。

            四,Debug面板
            這個(gè)面板對(duì)于熟悉Eclipse的用戶(hù)來(lái)說(shuō)應(yīng)該不用看了。
            通過(guò)以下三步將自己的應(yīng)用或?qū)⒁呀?jīng)跑起來(lái)的應(yīng)用加入調(diào)試列表:
            1)選擇Devices列表中Your app,
            2)選擇臭蟲(chóng)按鈕將該程序加載進(jìn)調(diào)試狀態(tài)
            3)OK,加斷點(diǎn)吧。不過(guò)源代碼要最新的否則斷點(diǎn)不起作用。

            五、DDMS如何讓IDE的調(diào)試工作起來(lái)呢?
            1)有幾個(gè)組成:
            一個(gè)是adb(Android Debug Bridge)參考第一部分,它起到調(diào)試橋的作用;

            另一類(lèi)是運(yùn)行在Device/Emulator端的adb daemon, VM, debugger, your Applicatioin,
            通過(guò)下面句話(huà)就可以理解它們的關(guān)系:
            一個(gè)App跑在一個(gè)進(jìn)程中,這個(gè)進(jìn)程又被一個(gè)VM綁定,都是一對(duì)一的,但VM與Emulator顯然是多對(duì)一的,
            那調(diào)試時(shí)debugger從VM中拿到棧線(xiàn)程進(jìn)程等信息,而daemon的作用僅僅是被DDMS用于建立一條連接(看下面)。

            最后一類(lèi)則是運(yùn)行在PC上的DDMS debugger;
            這個(gè)debugger是IDE的調(diào)試器,你可以改成另一個(gè)調(diào)試器;
            DDMS是Dalvik Debug Monitor Service,負(fù)責(zé)建立調(diào)試的作用,它僅有兩個(gè)Service,其他的功能都是通過(guò)ADB client.讓IDE與Emulator交互起來(lái)的。

            2)開(kāi)啟IDE時(shí),DDMS會(huì)建立一個(gè)Device monitoring service用于監(jiān)控Emulator,因?yàn)榭梢蚤_(kāi)啟多個(gè)Emulator嘛;
            如果找到一個(gè)Emulator,那么DDMS才會(huì)再開(kāi)啟另一個(gè)Service叫VM Monitoring Sevice用于監(jiān)控該Emulator下的VM; 第一部分提到adb有三個(gè)部分,其中的adb client可以多個(gè)實(shí)例的,DDMS的Service通過(guò)從ADB Client與ADb server的交互結(jié)果來(lái)維護(hù)自身的數(shù)據(jù)。

            如果VM Monitor找到Emulator的一個(gè)VM,那么DDMS會(huì)利用ADB獲取目標(biāo)VM的進(jìn)程ID,
            同時(shí)通過(guò)client與daemon建立起與vm的debugger的新連接,注意新連接的交互端口是從8600開(kāi)始的(n個(gè)的話(huà)端口是8659+n),這條新連接可以讓DDMS獲得與VM的實(shí)際交互。

            剩下的就是DDMS把拿到的數(shù)據(jù)再扔給ide 的 debugger(它們之間默認(rèn)通過(guò)8700端口,可更改,因?yàn)榕cVM的交互端口從8600開(kāi)始使用的話(huà)可能會(huì)不夠的),
            這樣IDE的Debug視圖就能正確工作了.

            posted on 2011-10-21 17:08 life02 閱讀(173) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99久久精品国产一区二区 | 国产亚洲欧美成人久久片| 亚洲精品国产综合久久一线| 久久久久国产一级毛片高清版| 久久男人Av资源网站无码软件| 日韩精品无码久久久久久| 亚洲乱码中文字幕久久孕妇黑人| 久久久久免费精品国产| 日韩人妻无码一区二区三区久久99 | 久久婷婷五月综合色高清| 久久精品人人做人人妻人人玩| 久久精品国产亚洲AV香蕉| 国产一区二区三区久久| 久久香蕉国产线看观看乱码| 亚洲嫩草影院久久精品| 久久久WWW成人| 久久精品免费全国观看国产| 青青草原精品99久久精品66| 久久精品成人欧美大片| 久久久免费精品re6| 久久这里有精品视频| 久久久久久国产a免费观看黄色大片 | 久久国语露脸国产精品电影| 午夜精品久久久久久毛片| 97久久超碰国产精品旧版| 精品久久久无码中文字幕| 久久人人爽人人爽人人片AV麻烦 | 久久精品国产亚洲AV影院| 久久久久人妻一区精品色| 91久久精品无码一区二区毛片| 亚洲精品成人网久久久久久| 精品无码久久久久久午夜| 久久久久亚洲精品天堂久久久久久 | 久久综合久久自在自线精品自| 久久777国产线看观看精品| 久久一区二区三区免费| 久久一日本道色综合久久| 久久亚洲国产成人精品无码区| 日韩人妻无码精品久久久不卡| 久久精品中文字幕第23页| 国产91久久精品一区二区|