ROM是如何做出来的cm编译篇

制作手机ROM,也就是我们平时说的刷机包,至少你要对一些概念有所了解,例如刷机,recovery,root,adb等等。这些基本概念不用介绍了,大家平日接触过有个概念就行。

我们所做的ROM是将一些主流的ROM适配到我们自己的手机上去,例如cm miui flyme等等,做ROM也有很多种途径,移植,插桩适配,源码编译。我们现在就学习两个方向做ROM,插桩适配和编译。移植ROM虽然上手难度小一点,但是情况太多修复bug也比较麻烦,这里就不论述了,有兴趣可以自己试试。

对于刚开始学习,一个手机是否合适还是有很大影响的。如果你的手机很合适,基本照着教程输完命令也就出包了。比如在开发者里人人皆知的nexus系列,当然国产的一加手机也是开发者中的首选。不过一些比较热门的手机也会比较好做,开源的就好。这个给大家一个地址https://github.com/CyanogenMod 然后去搜索一下你的手机代号(又说道代号了,这里又要补充一下,每一个手机基本都会有一个代号 不再用型号称呼 比如moto g代号是falcon小米4的代号是cancro 谷歌的nexus4代号是mako等等 这个你要去百度或者论坛里去查查)如果搜出来结果了像这个样子 那你的手机device就有了图片1.png

我们进行制作的环境一般都不在windows下,使用的是一些linux的系统,常用的有ubuntu,mint,debian等等等等这个看个人爱好用哪个 就像win7 win8 win10的选择。如果你的电脑配置比较好,又不想装双系统,可以用虚拟机的方式安装。不过还是推荐用实体机安装,这样以后用起来比较方便,性能也能得到利用。虚拟机安装方法这里不多说了,比较简单,实体机安装的时候一般把镜像解压到U盘 选U 盘启动按照提示一步一步就行。

等你安装完了接下来可以熟悉一下操作 这个系统很重要一个东西就是终端 按ctrl+alt+t可以呼出终端。
图片2.png

这个和windows下的cmd窗口差不多,这个命令也有很多 以后慢慢就熟悉了。

我们这里先做一些编译的准备,就打开这个终端,输入如下的命令,这个是安装一些必要的软件包:

sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev

之后就是下载repo了 repo这个东西我也说不清是干啥的,应该就是管理下载的 反正以后下载源码都会用到他 用下面命令:

mkdir -p ~/bin                //这个是新建一个叫bin的文件夹 mkdir这个是新建命令                    ~就是你的home目录

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
   //这个意思是从谷歌那里拉下来repo这个程序


chmod a+x ~/bin/repo             //给这个文件夹权限


echo "export PATH=~/bin:$PATH" >> ~/.bashrc          //这个是配置环境变量

之后就是大头戏了,咱们拉源码,这里要先建立好文件夹,别到时候都放到了home下。。会出来一大堆东西的我新建了一个叫做cyanogenmod的文件夹,这个都随意。之后进入文件夹之后右键打开终端,当然你也可以打开终端用cd命令进入。这时候会显示这样
图片3.png

之后只要输入

repo init -u git://github.com/CyanogenMod/android.git -b cm-12.1

然后输入

repo sync

可能下载的时候要设置邮箱和你的名字什么的 有提示之后输入

这里根据自己的情况改

git config --global user.email "your@email.address" 
git config --global user.name "Your Name"

这里的cm12.1就是拉取cm12.1的源码

你发现网络出问题了也可以中断 在运行中的终端输入ctrl+z就可以了 之后开始再输入repo sync

说到repo sync这个命令 还有很多学问 后面可以加一些参数 比如-c -j4之类的 具体可以自行了解一下不同

当你把源码都获取完了,会自动释放出来很多文件,源码目录下文件夹是这样的
图片4.png

简要说明一下device就是你的机型目录里面有你的设备文件夹 vendor里面是从你手机里拉取的一些文件 out到时候是生成包的目录

终端进到cyanogenmod文件夹,输入

source build/envsetup.sh

之后输入breakfast falcon(moto G的机型代号是falcon,这个根据机型的名称来)然后又会下载一大堆文件,这个是你手机的device。下载到最后有可能会说一些东西找不到之类的错误,没关系先进行下一步。

用cd命令进入到你机型的文件夹,比如我的cyanogenmod/device/motorola/falcon 输入

./extract-files.sh 

(前面有个. 的)然后就会从手机中拉取一些文件 这个和你手机中现在的rom也有些关系。我试过我用flyme的时候会有些文件拉取不到。。可能flyme系统中没有这些编译需要的文件,可以的话换一个偏原生点的包试试

进行完这个步骤之后可以再回到cyanogenmod文件夹下重来一次breakfast falcon了不出意外之前的那些错误应该会没了 如果再出错可以看看出错的提示,具体再讨论。

图片5.png

这样就是做好编译的准备了

输入

croot

然后输入

brunch falcon

如果不出错就可以等着出包了。按电脑的配置编译一次得N个小时。

当然途中可能会出现一些错误,别慌,错误一般都有提示,只要解决了可以从断点继续的。一些简单的错误可能会说build.prop里面少了一行手机的名称啊代号啥的。。这个照着路径找到文件加上就行后面有具体说,其他的如果碰到了可以对着出错提示分析,百度,或者咨询一些大神。从断的地方继续还是输入brunch falcon就行

每次要重新编译的时候,最好要清除一下上次的缓存之类的文件

make clobber

编译cm的方法就是这样,不过还有很多开源的rom项目,比如sudamod 下载源码的时候用sudamod的命令替换 之后breakfast的时候会提示一个sm_falcon什么的没有 这是sudamod和cm不一样的地方了 要稍作修改 进到你的设备目录下,有一个叫cm.mk的东西,打开来里面本来的cm_falcon改成sm_falcon 然后吧文件名也改成sm.mk 之后就和cm的步骤一样了 最后编译的时候会提示build.prop找不到一行什么参数 你就照着他提示的目录找到build.prop加上哪行参数。我编译cm的时候没有出什么问题,编译sudamod的时候发现这两个地方有区别其他都是一样的。 当然这里只是提供了一个例子 开源项目很多 解决方法也不一样 只要学会搜索咨询分析,都可以解决。

Cyanogenmod只是一个开源rom项目,还有很多,比如

Sudamod:https://github.com/sudamod

BOSP-LP: https://github.com/TeamBliss-LP

PAC : https://github.com/PAC-ROM

Omnirom: https://github.com/omnirom

参考文档

http://wiki.cyanogenmod.org/w/Build_for_bacon#Download_the_source_code