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


更多相关文章

  1. Android入门教程(九)之-----取得手机屏幕大小DisplayMetrics的应
  2. 如何解决:Android中 Error generating final archive: Debug Cert
  3. Android(安卓)SB的一面,BUG汇总
  4. [Java][Android][Process] 分享 Process 执行命令行封装类
  5. Android(安卓)中访问SDCARD
  6. Android开发——Android手机屏幕适配方案总结
  7. Android(安卓)Studio 怎么添加使用第三方jar包及无法编译的问题
  8. iPhone相较Android机型所存在的四大硬伤
  9. 使用PC端chrome 浏览器远程连接android设备调试手机页面

随机推荐

  1. Android Bitmap.setDensity(int density)
  2. Android的px、dip、sp的区别
  3. APK文件粗略介绍
  4. android 判断文件是否存在
  5. Android客户端自动更新代码
  6. Android Intent中的FLAG,很全
  7. Android之MediaPlayer(两种)基本使用方式
  8. android 客户端 smtp 协议发送数据
  9. [Android] 动态语言切换
  10. spotlight android app which likes spot