从公司断断续续下载了3天,终于把CM-11.0 的代码给下载下来了,分享一下下载编译rom包的过程。
一 前置条件
1 ubuntu 13.04 系统,同时配置好android的编译环境
配置方法详见 http://source.android.com/source/initializing.html 网页
2 下载源码
特别注意:
由于cm-11.0的代码巨大,下载完成 .repo隐藏文件夹下大概有10G,再一git fetch真正的
代码文件,大概有将近30G,然后再编译的话,估计又得多出来20G,笔者准备了一个100G的
分区,进行这次编译。为了以后不必要的麻烦,建议先准备好足够的硬盘空间。
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
需要用 CyanogenMod 提供的 repo工具
repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
下载相应的分支
repo sync
下载
3 Samsung Google Google Nexus S ("crespo") 手机一部,
我的手机中
关于手机
型号:Nexus S
基带版本: I9020XXKl1
4 刷机工具,比如完美刷机
二 重要网页
1 http://wiki.cyanogenmod.org/w/Devices#vendor=;
这个网页包含了cm 支持的所有机型,以及相应的驱动
2 http://wiki.cyanogenmod.org/w/Crespo_Info
这个网页包含了 crespo 这个设备的编译前需要的各种信息
其中 最重要的是
Device https://github.com/cyanogenmod/android_device_samsung_crespo
Kernel https://github.com/cyanogenmod/android_kernel_samsung_crespo
这两个包都需要下载,
其中驱动包:
下载解压缩以后,放在 cm-11/device/samsung/crespo 其中 crespo 这个文件夹如果没有要新建
内核包
下载解压缩以后,放在 cm-11/kernel/samsung/crespo 其中 crespo 这个文件夹如果没有要新建
另外注意,还有一个硬件包也要下载
Hardware https://github.com/CyanogenMod/android_hardware_samsung
下载解压缩以后,放在 cm-101hardware/samsung 其中samsung 这个文件夹如果没有要新建
3 http://wiki.cyanogenmod.org/w/Build_for_crespo
这个网页告诉了如何编译 crespo cm-10.2 这个版本的代码
三 编译源码
1 编译前的准备工作
cd ~/android/system/vendor/cm
./get-prebuilts
2 ./extract-files.sh
首先连接好samsung nexus S 手机,然后来到 cm-10/device/samsung/crepso 这个目录下,执行上面的指令。
这个脚本的主要作用是将手机中的驱动so库pull出来,然后新建 cm-10/vendor/samsung/crespo 这个目录,然后在里面放相应的库文件。
我的手机在执行这个命令的时候,一个错也没有报,如果缺少什么文件的话,见前面的文章,将so库给补齐即可。
3 真正开始编译
以前lunch 命令再选择编译哪个版本都不需要了,CyanogenMod 已经把这些封装成更简单的命令了
回根目录后
export USE_CCACHE=1
据说这样会加快编译速度
unset NDK_ROOT
解决android 源码编译本身的一个bug
. build/envsetup.sh
这个重要 执行成功后,后面的命令才能继续执行
croot
brunch crespo
ok 开始编译了
4 刷机,这点需要注意的是可能原来默认的 recovery 程序已经不兼容
最新的android 4.4的rom包了,所以需要用线刷的方式更新recovery 程序
更新方法:
1 先将生成的rom zip包,通过adb push上传到手机的 /sdcard/目录下,建议
修改成update.zip 名字
2 同时按下开机键和音量加键,进入fastboot模式,这个时候usb是初始化好的
然后运行
fastboot boot /CM11Disk/cm-11/out/target/product/crespo/recovery.img
这个命令
3 重启进入recovery 模式,用最新的recovery 程序进行更新update.zip包即可。
四 编译过程中的错误解决
首先编译的时候遇到了下面的错误
make: *** No rule to make target `/CM11Disk/cm-11/out/target/product/crespo/obj/SHARED_LIBRARIES/libs3cjpeg_intermediates/export_includes', needed by `/CM11Disk/cm-11/out/target/product/crespo/obj/SHARED_LIBRARIES/camera.herring_intermediates/import_includes'. Stop.
当时对这个错误的产生的原因感觉是少了 libs3cjpeg 这个库文件
在github搜索了一下,发现这个下载地址
https://github.com/android-ia/platform_external_libs3cjpeg
下载添加在 external/libs3cjpeg 目录下以后,重新编译依然发现出现了下面的错误
make: *** No rule to make target `/CM11Disk/cm-11/out/target/product/crespo/obj/lib/libs3cjpeg.so', needed by `/CM11Disk/cm-11/out/target/product/crespo/obj/SHARED_LIBRARIES/camera.herring_intermediates/LINKED/camera.herring.so'. Stop.
没办法用 adb pull 从手机里面拉出来一个 libs3cjpeg.so 硬放在product/crespo/obj/lib/libs3cjpeg.so 这个目录下,但是依然会出现
device/samsung/crespo/libcamera/SecCamera.h:38:31: fatal error: videodev2_samsung.h: No such file or directory
compilation terminated.
In file included from device/samsung/crespo/libcamera/SecCameraHWInterface.h:22:0,
from device/samsung/crespo/libcamera/SecCameraHWInterface.cpp:23:
device/samsung/crespo/libcamera/SecCamera.h:38:31: fatal error: videodev2_samsung.h: No such file or directory
compilation terminated.
make: *** [/CM11Disk/cm-11/out/target/product/crespo/obj/SHARED_LIBRARIES/camera.herring_intermediates/SecCamera.o] Error 1
这样的错误,这个时候开始怀疑前面的解决思路是错误的,看了
device/samsung/crespo/libcamera/Android.mk 这个文件后明白了错误了真正原因
LOCAL_C_INCLUDES += hardware/samsung/exynos3/s5pc110/include
LOCAL_C_INCLUDES += hardware/samsung/exynos3/s5pc110/libs3cjpeg
LOCAL_C_INCLUDES += frameworks/native/include/media/hardware
原来是hardware 少下载了一个工程,而这个工程本身没有在主干上,repo sync 并不能把其下载
在github 上找到这个工程 下载 cm-11.0版本hardware 然后再次进行编译
https://github.com/CyanogenMod/android_hardware_samsung/tree/cm-11.0
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。