昨天写了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的主要分区,并重启。
fastbootflashuserdata data.img
fastbootflashsystem system.img
fastbootflashboot boot.img
fastbootreboot

3、刷写recovery分区并重启
fastbootflashrecovery /path/to/<recovery>.img
fastbootreboot
4、擦除分区
fastbooterase boot
fastbooterase recovery
ADB的用法 刷机完成后,在日常开发调试过程中,最重要的工具是adb(Android Debug Bridge),这个工具位于android-sdk-linux/platform-tools目录下。豌豆夹之类的软件是基于adb的底层机制做成的应用(由于这种应用和adb一样需要设备工作在开发调试模式下,相信Android官方其实不想鼓励这种应用)。 ADB的用法说明: http://developer.android.com/guide/developing/tools/adb.html 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目录下,相关的官方文档: http://developer.android.com/guide/developing/tools/emulator.html http://developer.android.com/guide/developing/devices/emulator.html。 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 -avdmy_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

更多相关文章

  1. 了解Android和数据库连接
  2. shape的使用总结
  3. Android中shape的使用
  4. android 自定义组件 :对VelocityTracker的研究
  5. android 屏幕自适应
  6. Android快速开发框架-------afinal
  7. Android(安卓)自定义ViewGroup 实战篇 -> 实现FlowLayout
  8. Android中Shape和Selector的结合使用。
  9. Android(安卓)Shape

随机推荐

  1. Android Studio 打包错误org.gradle.api.
  2. error: resource android:attr/fontVaria
  3. android 启动时会多显示一个闪现屏
  4. Android内核编译和裁剪
  5. Spinner 使用方法小结
  6. ListView中使用线程实现无限加载
  7. Android发送邮件
  8. 2010.12.28——— android menu用法
  9. android 中的定时任务
  10. Android Studio编译失败:Error: Invoke-cu