说明:1)本流程以编译三星Galaxy Note II (N7100)的ROM为例来介绍编译流程
2)假定CM10.1所在代码的根目录为/root/cm-10.1
一、CM-10.1源码下载
网上很多相关资料,参考
http://blog.163.com/zhou_411424/blog/static/1973621562012111782412775/
Repo工具下载好后开始取cm的源码
执行:repo init -u git://github.com/CyanogenMod/android.git -bcm-10.1-m cm-10.1.0-RC3.xml
初始化仓库后,接着执行repo sync来下载代码,
问题来了,半天下不动,最后还报错,解决办法在主机加入gmail账号的授权,步骤如下:
1.浏览器登录https://android.googlesource.com/new-password,并用gmail帐号登录;
2.点击网页上的“允许访问”,得到类似:
------涂鸦部分为个人gmail帐号-------
3.把得到授权后的username和password粘到~/.netrc文件里,如果没此文件,新建。
即加入下面部分:
再次执行repo sync 这次能下载了.....等到代码下载完成。
二、CM-10.1源码编译
cd /root/cm-10.1/vendor/cm
./get-prebuilts
cd ../..
source build/envsetup.sh
breakfast n7100 //注意这一步会链接网络并下载三星N7100的设备驱动和内核,具体体现在代码:device\samsung\n7100这个目录代码会自动生成
cd device\samsung\n7100
./extract-files.sh //提示没有device\samsung\smdk4412-common目录
好吧继续寻找smdk4412-common这个目录
打开网址https://github.com/CyanogenMod
搜索smdk4412-common,搜到了一条,这就是我们要找的
cd device/samsung
git clone https://github.com/CyanogenMod/android_device_samsung_smdk4412-common-b cm-10.1
记得改目录名字
mv android_device_samsung_smdk4412-common smdk4412-common
好的,device\samsung\smdk4412-common这个目录的代码搞定
接下来开始编译
(如果要编译eng版本,需要执行choosecombo命令,一路回车下去即可)
make -j42>&1 | tee build.log //网上有资料说先执行croot ,然后再brunch n7100来编译,实际测试过,也行。
中途发现报错:
build/core/product_config.mk:238: ***_nic.PRODUCTS.[[device/samsung/n8000/cm.mk]]:"hardware/samsung/exynos4x12.mk" does not exist。 停止。
大概意思就是少了hardware/samsung目录,cd hardware发现确实没有samsung目录,好吧!像上面寻找smdk4412-common目录一下,寻找samsung目录,搜索hardware_samsung,出现的第一条就是我们要找的,
cd hardware
git clone https://github.com/CyanogenMod/android_hardware_samsung-b cm-10.1
搞定。
接下来继续编译
make -j42>&1 | tee build.log
中途又报错:
找不到vendor/samsung/smdk4412-common/proprietary/sbin/cbd
Cdvendor/samsung/smdk4412-common/proprietary/sbin/ 发现确实是空目录,基本上smdk4412-common这个里面只有目录结构,没有文件,好吧,到网上去下载吧
路径:https://github.com/DonkeyCoyote/proprietary_vendor_samsung
Git clone https://github.com/DonkeyCoyote/proprietary_vendor_samsung
默认是4.3的分支。Ok,没问题。
记得改文件名!
接下来继续编译吧!
这次不再差目录了,说明三星有关的目录文件都齐了。。。
中途又报错:
target Dex:framework
make: ***[out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex]Killed
打包dex文件报错,内存不足造成,网上有很多解决方法,不过貌似不行
最后解决方法:重新编译make 2>&1 | tee build.log
不要采用四线程.....
Ok,这次编译通过!
生成ROM的zip包
执行 make otapackage 2>&1 | tee ota.log
顺利的话,这步执行很快,十分钟搞定!会在out/target/product/n7100/目录下生成xxxx.zip包。
Ps:下次如果想单独编译某个模块,必须先在android根目录下执行以下命令来配置环境变量:
. build/envsetup.sh
breakfast n7100
choosecombo //一路回车下去即可。
参考资料:http://www.tuicool.com/articles/FRza2q
http://blog.sina.com.cn/s/blog_4ba5b45e0102ejbb.html
完整编译成功代码后,后续要单独编译某个模块,只需如下操作:
. build/envsetup.sh
breakfast n7100
choosecombo release cm_n7100 eng
三、解决信号强度显示问题
1、用上面步骤中生成的xxxx.zipROM包刷机,启动后发现信号强度显示还是有问题。
解决方法:找到6193.zip包,解压,替换手机内/system/lib/libril.so库,具体命令:
adb remount //执行后输出 remount succeeded
adb push 6139目录/system/lib/libril.so/system/lib
或者
先拷贝到手机sd卡上,再通过三方应用Root Explorer拷贝至/system/lib目录。
重启手机后发现信号强度正常。
2、蓝牙开关失效,一直反复开启关闭的问题
解决方法:对比cm-10.1.0-RC3.xml和cm-10.1.xml两个版本的蓝牙应用测和框架侧代码,目录为
packages/apps/Bluetooth
frameworks/base/core/java/android/bluetooth
也就是将cm-10.1.0-RC3版本的蓝牙应用测和框架侧代码更新至cm-10.1版本,改动不会太大。
修改之后,分别编译packages/apps/Bluetooth和frameworks/base目录,分别生成Bluetooth.apk和frameworks.jar,push到手机
对应的目录,然后重启手机,发现蓝牙问题解决。