ANDRIOD学习笔记之nand、root以及主要调试工具篇

 昨天写了Android的开发如何初始化环境配置今天继续说说Android开发调试的几大工具,主要是adb fastboot 和emulator。一般使用eclipse进行开发的Android开发者也许完全不需要用到这几个命令,但是,若要了解到系统内部,工具无疑就是解剖Android的手术刀。

 

Android的NAND结构与Root的过程

       Android的刷机、Root、开发调试过程中不可避免的涉及到Android的NAND(翻译做闪存?)。耳熟能详的主要几大分区有boot、system、userdata、和recovery。
 

        system、userdata分区在Android文件系统中被挂载为/system和/data目录,这两个目录在使用调试工具adb的时候可以看得到,/data允许进行读写,主要存放用户自安装的程序以及使用设备产生的用户个人数据,system目录存放系统的文件以及预装的重要的系统应用,挂载到文件系统中不允许读写(除非设备被Root)。boot分区则存放操作系统的内核和initrd。recovery分区包含了一套后备的系统,主要在设备升级、备份、维护的时候使用,简单的说,要刷ROM需要进入recovery模式。

 

        在设备的正常工作状态(即是设备没有被Root的时候)下,只有userdata和cache分区是可读写的,其他分区则一般处在只读状态。这种设计的本意是保护系统以及系统的重要程序不被恶意纂改,保证系统的安全性,但是,当recovery分区上的recovery.img被覆盖成另一个版本(例如ClockWorkMod recovery image),recovery分区上的NAND保护机制被破坏了,NAND的分区就完全失去了保护,可以自由的更新system.img和boot.img,此时,可以说设备被Root了,或者说Nand处在"解锁(unlocked)"状态。因此,Android智能手机用户自己动手Root手机设备以及使用网上下载的手机文件来更新Nand(刷机),这是危险的举动。

fastboot的用法

        fastboot是Android SDK的用来读写NAND的工具,位于android-sdk-linux/platform-tools目录下,下面介绍fastboot的主要用法。
 
        1、手机首先要进入fastboot状态/recovery模式下,有些设备必须确保设备处在S-OFF (security off)状态。 下面以华为的C8500设备来说明。
 
        a:首先关机
        b:按住“音量减键”不放开,按住红色“挂断键”不放开(请一直不要放开按住的“音量减键”),按住“电源键”不放开(请一直不要放开按住的“音量减键”与红色“挂断键”)
        c:持续按住大约五秒钟(三键同时按住),手机显示停顿在华为Logo画面(手机主界面并没有继续启动,即一直停顿在华为Logo开机画面),即表示手机进入fastboot模式
 
2、下面这几个命令刷写NAND的主要分区,并重启。
fastboot flash userdata data.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot reboot

 

3、刷写recovery分区并重启
fastboot flash recovery /path/to/<recovery>.img
fastboot reboot
4、擦除分区
fastboot erase boot
fastboot erase recovery
ADB的用法
 
        刷机完成后,在日常开发调试过程中,最重要的工具是adb(Android Debug Bridge),这个工具位于android-sdk-linux/platform-tools目录下。豌豆夹之类的软件是基于adb的底层机制做成的应用(由于这种应用和adb一样需要设备工作在开发调试模式下,相信Android官方其实不想鼓励这种应用)。
        ADB的用法说明:
 
        1、使用USB连接线连接ubuntu和智能手机设备,并在设备上打开调试模式。设置->应用程序->开发->USB调试选项打勾。
        2、adb devices能够看到设备的状态,adb shell能够连接上去设备看到一个linux的系统,使用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 <remote> <local>
        adb push <local> <remote>
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、运行系统上的命令,进入adb shell,可以查看到/system/bin有可运行的系统命令使用,此处以sqlite3为例,获取应用的用户数据(被Root的机器,好危险呀)。
        $ 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开发人员也许不会了解到,原因是万能的eclipse IDE配置好了之后,开发人员就直接写应用,然后在IDE上运行调试去了。这无疑很大程度的降低了开发人员的技术门槛。emulator位于android-sdk-linux/tools目录下,相关的官方文档:
        emulator的工作原理很简单,创建开发机器上的虚拟硬件设备,在虚拟硬件设备上面运行系统。如果使用eclipse IDE,在第一次运行程序的时候会自动提醒建立虚拟硬件设备(图形界面,直接点击即可)。手工使用命令行创建虚拟硬件设备也可以,参考http://developer.android.com/guide/developing/devices/managing-avds-cmdline.html
 
        命令行下创建虚拟硬件设备:
        ~/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

 
        命令行下运行模拟器,可以看到一个基于qemu虚拟机上运行的android模拟设备的运行界面:
        ~/android/sdk/android-sdk-linux/tools$ ./emulator -avd my_android2.3
 
        用模拟器加载非系统缺省的调试NAND文件,创建好虚拟硬件设备后,使用emulator的参数指定第三方NAND分区文件。例如,下面的命令指定了自编译出来的各种文件:
        ./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
posted @ 2012-04-13 23:59  生活不是用来挥霍的  阅读(1453)  评论(0编辑  收藏  举报