自己编译过源码的人一定都知道,编译成功之后/out目录下会有相应的输出文件,典型的就是那些img镜像文件,编译成功后的结晶,大部分没有真机的就可能直接模拟器打开了,但是对我来说,模拟器真的是太鸡肋了,可能是配置原因吧,虚拟机根本拍不起来,慢的一批,那就只有刷到真机那才是真正的流畅啊,同志们,那么重点就来了,刷机要刷什么呢?输出的文件有哦那么多img,怎么个刷法?
先看看编译成功后的几个重要文件:
在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。
system目录是主要的文件系统,data目录是存放数据的文件系统。
obj/SHARED_LIBRARIES中存放所有动态库。
obj/STATIC_LIBRARIES中存放所有静态库。
几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。system.img是主要文件系统的映像,android 的framework,application 等等,会被挂接到 "/" 上,包含了系统中所有的二进制文件,userdata.img将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据 。这几个image文件是运行时真正需要的文件。 vendor是真机需要的各种驱动文件,sim卡、蓝牙等驱动文件
输入的步骤,参见上一篇文章的刷机部分
大致就是
我们再来看看官方给出的刷机包,下载完是个zip包:
这个zip包里面有几个文件:
逐个对应:
|-- bootloader镜像,官方会先刷入这个
|-- windows下的刷机脚本
|-- linux、mac下的刷机脚本
|-- 只刷入基本的脚本,只包含bootloader和radio
|-- 系统镜像打成的zip包
|-- radio镜像
flash-all.sh文件脚本:
fastboot flash bootloader bootloader-bullhead-bhz10k.img #刷入指定版本的bootloader
fastboot reboot-bootloader #重启bootloader
sleep 5 #休息5秒
fastboot flash radio radio-bullhead-m8994f-2.6.30.0.68.img#刷入radio
fastboot reboot-bootloader #重启bootloader
sleep 5
fastboot -w update image-bullhead-mmb29k.zip #刷入zip包里面的所有img镜像
flash-base.sh只比flash-all.sh少了最后一句,没有刷入系统镜像而已.
看看系统镜像zip包,打开看看里面是什么:
这里面是系统的各种镜像,其中android-info.txt文件:
require board=bullhead #指定了android系统使用的真机版本
require version-bootloader=BHZ10r #指定了bootloader版本,只是刷入真机需要检查的
require version-baseband=M8994F-2.6.32.1.13 #指定了radio版本,刷入系统前需要检查版本是否和真机一致
这里就指定了外面的版本必须和这个一致
到这里可以看到,官方把直接编译出来的各种img打包成zip包,然后一次性将这些包全部刷入真机,这和我们手动刷入真机的效果是一样的,只不过官方放出来的刷机包是打过包的,可以自动化执行脚本,一次性安装完毕.
官方先刷入基本的bootloader、radio就是外面的两个镜像,然后再刷入系统镜像,其中android-info.txt中指定了目标真机的版本、bootloader、radio的版本
到这就明白了官方刷机包的结构了,如果自己想把自己编译的android系统镜像做成刷机包,就可以相应的替换掉系统zip包里面的各种镜像,然后直接运行脚本就OK了!