首页 > 代码库 > CyanogenMod 11.0 android 4.4 编译指南

CyanogenMod 11.0 android 4.4 编译指南

从公司断断续续下载了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