电竞比分网-中国电竞赛事及体育赛事平台

分享

ANDRIOD學(xué)習(xí)筆記之nand、root以及主要調(diào)試工具篇

 xyjackxjw 2013-06-08

ANDRIOD學(xué)習(xí)筆記之nand、root以及主要調(diào)試工具篇

2012-4-15 09:02|發(fā)布者: benben|查看: 1740|評(píng)論: 0

摘要: 昨天寫了Android的開發(fā)如何初始化環(huán)境配置,今天繼續(xù)說說Android開發(fā)調(diào)試的幾大工具,主要是adb fastboot 和emulator。一般使用eclipse進(jìn)行開發(fā)的Android開發(fā)者也許完全不需要用到這幾個(gè)命令,但是,若要了解到系統(tǒng) ...

 昨天寫了Android的開發(fā)如何初始化環(huán)境配置今天繼續(xù)說說Android開發(fā)調(diào)試的幾大工具,主要是adb fastboot 和emulator。一般使用eclipse進(jìn)行開發(fā)的Android開發(fā)者也許完全不需要用到這幾個(gè)命令,但是,若要了解到系統(tǒng)內(nèi)部,工具無疑就是解剖Android的手術(shù)刀。

 

Android的NAND結(jié)構(gòu)與Root的過程

       Android的刷機(jī)、Root、開發(fā)調(diào)試過程中不可避免的涉及到Android的NAND(翻譯做閃存?)。耳熟能詳?shù)闹饕獛状蠓謪^(qū)有boot、system、userdata、和recovery。
 

        system、userdata分區(qū)在Android文件系統(tǒng)中被掛載為/system和/data目錄,這兩個(gè)目錄在使用調(diào)試工具adb的時(shí)候可以看得到,/data允許進(jìn)行讀寫,主要存放用戶自安裝的程序以及使用設(shè)備產(chǎn)生的用戶個(gè)人數(shù)據(jù),system目錄存放系統(tǒng)的文件以及預(yù)裝的重要的系統(tǒng)應(yīng)用,掛載到文件系統(tǒng)中不允許讀寫(除非設(shè)備被Root)。boot分區(qū)則存放操作系統(tǒng)的內(nèi)核和initrd。recovery分區(qū)包含了一套后備的系統(tǒng),主要在設(shè)備升級(jí)、備份、維護(hù)的時(shí)候使用,簡(jiǎn)單的說,要刷ROM需要進(jìn)入recovery模式。

 

        在設(shè)備的正常工作狀態(tài)(即是設(shè)備沒有被Root的時(shí)候)下,只有userdata和cache分區(qū)是可讀寫的,其他分區(qū)則一般處在只讀狀態(tài)。這種設(shè)計(jì)的本意是保護(hù)系統(tǒng)以及系統(tǒng)的重要程序不被惡意纂改,保證系統(tǒng)的安全性,但是,當(dāng)recovery分區(qū)上的recovery.img被覆蓋成另一個(gè)版本(例如ClockWorkMod recovery image),recovery分區(qū)上的NAND保護(hù)機(jī)制被破壞了,NAND的分區(qū)就完全失去了保護(hù),可以自由的更新system.img和boot.img,此時(shí),可以說設(shè)備被Root了,或者說Nand處在"解鎖(unlocked)"狀態(tài)。因此,Android智能手機(jī)用戶自己動(dòng)手Root手機(jī)設(shè)備以及使用網(wǎng)上下載的手機(jī)文件來更新Nand(刷機(jī)),這是危險(xiǎn)的舉動(dòng)。

fastboot的用法

        fastboot是Android SDK的用來讀寫NAND的工具,位于android-sdk-linux/platform-tools目錄下,下面介紹fastboot的主要用法。
 
        1、手機(jī)首先要進(jìn)入fastboot狀態(tài)/recovery模式下,有些設(shè)備必須確保設(shè)備處在S-OFF (security off)狀態(tài)。 下面以華為的C8500設(shè)備來說明。
 
        a:首先關(guān)機(jī)
        b:按住“音量減鍵”不放開,按住紅色“掛斷鍵”不放開(請(qǐng)一直不要放開按住的“音量減鍵”),按住“電源鍵”不放開(請(qǐng)一直不要放開按住的“音量減鍵”與紅色“掛斷鍵”)
        c:持續(xù)按住大約五秒鐘(三鍵同時(shí)按?。?手機(jī)顯示停頓在華為L(zhǎng)ogo畫面(手機(jī)主界面并沒有繼續(xù)啟動(dòng),即一直停頓在華為L(zhǎng)ogo開機(jī)畫面),即表示手機(jī)進(jìn)入fastboot模式
 
2、下面這幾個(gè)命令刷寫NAND的主要分區(qū),并重啟。
fastboot flash userdata data.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot

 

3、刷寫recovery分區(qū)并重啟
fastboot flash recovery /path/to/.img
fastboot reboot
4、擦除分區(qū)
fastboot erase boot
fastboot erase recovery
ADB的用法
 
        刷機(jī)完成后,在日常開發(fā)調(diào)試過程中,最重要的工具是adb(Android Debug Bridge),這個(gè)工具位于android-sdk-linux/platform-tools目錄下。豌豆夾之類的軟件是基于adb的底層機(jī)制做成的應(yīng)用(由于這種應(yīng)用和adb一樣需要設(shè)備工作在開發(fā)調(diào)試模式下,相信Android官方其實(shí)不想鼓勵(lì)這種應(yīng)用)。
        ADB的用法說明:
 
        1、使用USB連接線連接ubuntu和智能手機(jī)設(shè)備,并在設(shè)備上打開調(diào)試模式。設(shè)置->應(yīng)用程序->開發(fā)->USB調(diào)試選項(xiàng)打勾。
        2、adb devices能夠看到設(shè)備的狀態(tài),adb shell能夠連接上去設(shè)備看到一個(gè)linux的系統(tǒng),使用ls還能看到文件目錄
        ~/android/sdk/android-sdk-linux/platform-tools$ ./adb devices
        List of devices attached 
        0A3AABB70502A00Adevice
 
        ~/android/sdk/android-sdk-linux/platform-tools$ ./adb shell

       # ls
       acct                 init                 sd-ext
       cache                init.c8500.rc        sdcard
       config               init.goldfish.rc     sys
       d                    init.rc              system
       data                 mnt                  ueventd.goldfish.rc
       default.prop         proc                 ueventd.huawei.rc
       dev                  root                 ueventd.rc

       etc                  sbin                 vendor

 

 
3、上傳下載文件
        adb pull
        adb push
4、查看日志
        ~/android/sdk/android-sdk-linux/platform-tools$ ./adb shell
 
        #logcat ActivityManager:I *:S
04-12 16:01:03.255  1262  1272 I ActivityManager: Start proc com.tencent.mm for broadcast com.tencent.mm/.booter.NotifyReceiver: pid=25676       uid=10188 gids={1006, 3003, 1015}
04-12 16:01:03.482  1262  1290 I ActivityManager: Displayed activity com.android.settings/.ApplicationSettings: 323 ms (total 323 ms)
......
 
4、運(yùn)行系統(tǒng)上的命令,進(jìn)入adb shell,可以查看到/system/bin有可運(yùn)行的系統(tǒng)命令使用,此處以sqlite3為例,獲取應(yīng)用的用戶數(shù)據(jù)(被Root的機(jī)器,好危險(xiǎn)呀)。
        $ adb -s emulator-5554 shell
        # sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
        SQLite version 3.3.12
        Enter ".help" for instructions
        .... enter commands, then quit...
        sqlite> .exit 

 
emulator的用法
 
        emulator一般的Android開發(fā)人員也許不會(huì)了解到,原因是萬能的eclipse IDE配置好了之后,開發(fā)人員就直接寫應(yīng)用,然后在IDE上運(yùn)行調(diào)試去了。這無疑很大程度的降低了開發(fā)人員的技術(shù)門檻。emulator位于android-sdk-linux/tools目錄下,相關(guān)的官方文檔:
        emulator的工作原理很簡(jiǎn)單,創(chuàng)建開發(fā)機(jī)器上的虛擬硬件設(shè)備,在虛擬硬件設(shè)備上面運(yùn)行系統(tǒng)。如果使用eclipse IDE,在第一次運(yùn)行程序的時(shí)候會(huì)自動(dòng)提醒建立虛擬硬件設(shè)備(圖形界面,直接點(diǎn)擊即可)。手工使用命令行創(chuàng)建虛擬硬件設(shè)備也可以,參考http://developer./guide/developing/devices/managing-avds-cmdline.html。
 
        命令行下創(chuàng)建虛擬硬件設(shè)備:
        ~/android/sdk/android-sdk-linux/tools$ ./android create avd -n my_android2.3 -t 3
        Auto-selecting single ABI armeabi
        Android 2.3.3 is a basic Android platform.
        Do you wish to create a custom hardware profile [no]
        Created AVD 'my_android2.3' based on Android 2.3.3, ARM (armeabi) processor,
        with the following hardware config:
        hw.lcd.density=240
        vm.heapSize=24
        hw.ramSize=256

 
        命令行下運(yùn)行模擬器,可以看到一個(gè)基于qemu虛擬機(jī)上運(yùn)行的android模擬設(shè)備的運(yùn)行界面:
        ~/android/sdk/android-sdk-linux/tools$ ./emulator -avd my_android2.3
 
        用模擬器加載非系統(tǒng)缺省的調(diào)試NAND文件,創(chuàng)建好虛擬硬件設(shè)備后,使用emulator的參數(shù)指定第三方NAND分區(qū)文件。例如,下面的命令指定了自編譯出來的各種文件:
        ./emulator -avd my_emulator_avd -system ~/cyanogenmod/out/target/product/c8500/system.img -data ~/cyanogenmod/out/target/product/c8500/userdata.img -kernel ~/cyanogenmod/out/target/product/c8500/kernel -ramdisk ~/cyanogenmod/out/target/product/c8500/ramdisk.img -debug all

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多