1. 前提
1、准备一台Nexus 5手机。
2、准备B2G OS v2.6版的nexus-5系统源码:FireFox OS(B2G)源码获取与Build code。
3、Android4.4.4的系统:Android源码编译之Nexus5真机编译。
4、之所以让B2G OS v2.6与Android4.4.4对比,是因为B2G OS v2.6底层是在Android4.4.4基础上移植来的,在他们之间对比比较有针对性;至少在源码目录上对比其间的差别。
2. 对比源码目录
2.1 对比源码根目录
上图为B2G系统源码根目录:~/Project/aosp_android_4.4.4/
下图为Android4.4.4系统源码根目录:~/Project/B2G_nexus-5/
1、还是Android的源码目录看着干净些,而B2G OS在其根目录上加了好多用于下载、编译系统的脚本文件(因为B2G的编译只要一条build.sh -j16命令即可,但其实现原理和Android一样,只是封装了Android编译时的那些source build/envsetup.sh 、 lunch 、make -j16等动作)。所以根目录表面的这些脚本文件不用管了。
2、其它目录:
保留:
/abi、/bionic、/bootable、/build、/dalvik、/device、/external、/frameworks、/hardware、
/libcore、/libnativehelper、/ndk、/prebuild、/system、/tools、/verdor
删除:
/art、/cts、/developers、/development、/docs、/packages、/pdk、/sdk
增加:
/download-nexus-5、/gaia、/gecko、/gonk-misc、/librecovery、/rilproxy、/scripts
2.2 对比保留部分代码
2.2.1 对比源码/abi、/bionic、/build、/ndk、/vendor、/libcore、/libnativehelper、
/目录
在这两个目录中分别执行tree命令,发现两个系统的这两个目录完全相同。其中,
/abi :abi相关代码,Application binary interface,应用程序二进制接口。
/bionic:bionic库。
/build:存放系统编译规则及geneic等基础开发配置包。
/ndk:ndk相关代码。Android Native Development Kit 允许开发人员在Android应用程序中嵌入c/c++ 语言编写的非托管代码。
/vendor:厂商制定代码。
2.2.2 对比源码/bootable目录
其中主要是recovery的源码,在刷机方面,B2G系统和Android完全相同,也是使用fastboot或者通过recovery进行刷机。注意,其中bootloader的代码被OEM厂商控制,并没有开源出来。
由此也可看出,B2G OS的刷机依然是来自Android的那一套机制来支撑。
2.2.3 对比源码/dalvik目录
B2G OS代码的dalvik中只有一个fake_dvm,根据B2G系统性质,启动后并没有去启动Android虚拟机,他并不需要Android虚拟机支持,它是个网页系统。
2.2.4 对比源码/device目录
device目录下存放着设备相关代码,B2G OS代码中移除了原来Android系统中包含但当前系统无用的其它厂商的代码。
2.2.5 对比源码/external目录
external目录下存放着Android使用的一些开源的模组,B2G OS代码中移除了原来Android系统中包含但当前系统无用的开源模组。
2.2.6 对比源码/framework目录
framework目录下删除了compile、ex、mff、ml、rs、support、testing、volley、webview,其余的av、base、native、opt、wilhelm完全相同。
2.2.7 对比源码/system目录
system目录下增加了bluetoothd、libfdio、libpdu、nfcd、sensorsd,这些是Mozilla公司添加进去的(可查看其中每个目录下的PORTING、README等文档),其余目录中的文件完全相同。
2.2.8 对比源码/hardware目录
hardware中移除了akm、samsung_slsi、ti的部分,其他部分完全相同,只是增加了一个libhardware_moz(其中只有一个b2g_bdroid_buildcfg.h)
2.2.9 对比源码/prebuilts
但发现B2G中的prebuilts目录居然有33G这么大,查了下原因是在prebuilts/tools/.git/object中有几个很大的文件(整个.git文件夹居然有22G这么大。。。),我就把它删掉了,这些文件什么用暂时未知,删掉无所谓,不影响系统。
2.2.10 对比源码/tools
tools目录下,Mozilla公司添加了一些.py脚本工具。
2.3 对比删除部分代码
/art:Android新的虚拟机,后期Android系统弃用了dalvik。
/cts:Android兼容性测试套件标准。
/developers:应用程序开发相关。
/development:应用程序开发相关。
/docs:介绍开源的相关文档。
/packages:应用程序包。
/pdk:Plug Development Kit的缩写,是本地开发套件。
/sdk:SDK及模拟器。
2.4 对比增加部分代码
/download-nexus-5:
/gaia:B2G OS architecture
/gecko:B2G OS architecture
/gonk-misc:参考Gonk或B2G OS architecture
/librecovery:B2G OS architecture
/rilproxy:B2G OS architecture
/scripts:B2G OS architecture