昨天写了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的主要分区,并重启。
3、刷写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 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、运行系统上的命令,进入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 |
联系客服