环境搭建

1.安装64位Ubuntu系统(实体安装、虚拟机安装均可)

注意:要求机器至少4G内存(虚拟机至少分配4G内存),硬盘至少100G空间(源码20G+,编译后整个目录约60~70G)
安装方法请百度~

2.更新系统至最新版本,在终端下输入

sudo apt-get update
sudo apt-get upgrade

3.安装编译必需软件包

sudo apt-get install

For both 32-bit & 64-bit systems, you'll need:

bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.-dev libwxgtk2.-dev libxml2 libxml2-utils lzop maven openjdk--jdk pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev
In addition to the above, for 64-bit systems, get these:
g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev

For Ubuntu 15.10 (wily) and newer, substitute:

lib32readline-gplv2-dev → lib32readline6-dev

For Ubuntu 16.04 (xenial) and newer, substitute (additionally see java notes below):

libwxgtk2.-dev → libwxgtk3.-dev
openjdk--jdk → openjdk--jdk

Java versions: Different versions of CyanogenMod require different versions of the JDK (Java Development Kit):

  • CyanogenMod 7 - 9: Sun/Oracle Java SE 1.6
  • CyanogenMod 10.1: Sun/Oracle Java SE 1.6 or 1.7
  • CyanogenMod 10.2 - 11.0: Sun/Oracle Java SE 1.6 or 1.7 (OpenJDK 1.7 works fine, but the build system will display a warning)
  • CyanogenMod 12.0 - 13.0: OpenJDK 1.7 (see note about OpenJDK 1.8 below)

Ubuntu 16.04 (Xenial Xerus) or newer and OpenJDK: Since OpenJDK 1.7 was removed from the official Ubuntu repositories, you have a couple options:

  1. Obtain OpenJDK 1.7 from the openjdk-r PPA
  2. Enable experimental OpenJDK 1.8 support in CyanogenMod 13.0 (not available in earlier version). To enable OpenJDK 1.8 support, add this line to your $HOME/.bashrc file:
  3. export EXPERIMENTAL_USE_JAVA8=true

4.建立repo命令

mkdir -p ~/bin
curl https://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo echo "export PATH=~/bin:$PATH" >> ~/.bashrc

注意,第二行要从谷歌那里下载repo小程序,国内网络你懂的,可以在浏览器上面挂个代理通过以下地址下载好,拷贝到~/bin/repo,再执行第三行和第四行命令,当然,最好的办法是:

1.新建一个储存源码的文件夹,这里以~/android/cm为例

mkdir ~/android/cm
cd ~/android/cm

2.初始化源码目录

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

若初始化失败,请参考http://www.cnblogs.com/dinphy/p/5669384.html

3.添加红米3专用文件目录

mkdir ~/android/cm/.repo/local_manifests
gedit ~/android/cm/.repo/local_manifests/ido.xml

把以下内容复制进去

<?xml version="1.0" encoding="utf-8"?>
<manifest>
<!-- Device repos -->
<project name="dinphy1205/android_device_xiaomi_ido-cm12.1" path="device/xiaomi/ido" revision="cm-12.1" remote="github" />
<project name="dinphy1205/proprietary_vendor_xiaomi_ido-12.1" path="vendor/xiaomi" revision="cm-12.1" remote="github" />
<project name="dinphy1205/android_kernel_xiaomi_msm8916-12.1" path="kernel/xiaomi/ido" revision="cm-12.1" remote="github" />
<project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" revision="cm-12.1" remote="github" />
<!-- Other -->
<project name="CyanogenMod/android_external_mm-dash" path="external/mm-dash" revision="cm-12.1" remote="github" />
</manifest>

13.0的复制如下:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- Device repos -->
<project path="device/xiaomi/ido" name="dinphy1205/android_device_xiaomi_ido-1" revision="cm-13.0" />
<project path="kernel/xiaomi/ido" name="dinphy1205/android_kernel_xiaomi_ido" revision="cm-13.0" />
<project path="vendor/xiaomi/ido" name="dinphy1205/android_vendor_xiaomi_ido-1" revision="cm-13.0" />
   <project path="device/qcom/common" name="CyanogenMod/android_device_qcom_common" revision="cm-13.0" />
<!-- Other -->
<project path="external/sony/boringssl-compat" name="CyanogenMod/android_external_sony_boringssl-compat" revision="cm-13.0" />
<project path="external/stlport" name="CyanogenMod/android_external_stlport" revision="cm-13.0" />
</manifest>

4.针对国内网络环境的处理(略自己使用VPN或者SS,教程请百度)

5.拉取代码(需要下载约十几个G的内容,花费时间参考各自网速)

repo sync -c -f -j8 --force-sync --no-clone-bundle

如果中间断网了,或者出错了,重新repo sync一下就可以继续了~

6.获取预编译的部分文件

cd ~/android/cm/vendor/cm
./get-prebuilts

如果已经有了,这步跳过

编译ROM
1.初始化编译环境

cd ~/android/cm
. build/envsetup.sh
lunch cm_ido-userdebug

2.编译ROM(我笔记本下面虚拟机花费时间约2小时,取决于个人电脑性能)

mka ido

or

brunch cm_ido-userbug

注意:目前编译刚开始出现下面几行是正常现象,不影响的~

  1. find: 'src': No such file or directory
  2. find: 'phone/java': No such file or directory
  3. find: 'dummy': No such file or directory

再次编译
1.建议每次编译都要把上一次编译的内容清除,否则有可能出现莫名其妙的问题

  1. make clobber

2.再次同步源码到最新版本

repo sync -c -f -j8 --force-sync --no-clone-bundle

3.初始化编译环境

. build/envsetup.sh
lunch cm_ido-userdebug

4.编译ROM

mka ido

一点贴士

1、机型文件device、kernel、vendor放置路径

1)device

device/xiaomi/ido

2)kernel

kernel/xiaomi/msm8916

3)vendor

vendor/xiaomi/ido

2、开启ccache,加速编译过程

$ echo "export USE_CCACHE=1" >> ~/.bashrc
$ ~/cm/prebuilts/misc/linux-x86/ccache/ccache -M 50G

CM12.1/13.0编译教程的更多相关文章

  1. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  2. CM12同步源码及编译教程

    同时提供基于安卓5.0的MKL魔趣猪扒饭编译教程~[玩机组出品]魔趣猪扒饭MKL50.1编译教程http://www.oneplusbbs.com/forum.php?mod=viewthread&a ...

  3. hadoop2.1.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  4. hadoop2.1.0和hadoop2.2.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  5. TWRP基于omnirom 6.0.1编译教程

    1.环境搭配 参照CM13.0编译笔记http://www.cnblogs.com/dinphy/p/5670293.html 参照SM 2.0 编译笔记http://www.cnblogs.com/ ...

  6. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...

  7. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

  8. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  9. NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

    转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-we ...

随机推荐

  1. android studio 和idea 导入library工程

    idea 导入library方法 把工程Import成module后,具体的操作看图: 同样的,打开Project structure,点开你要作为library的module,然后点击android ...

  2. C#实现在图片上斜着写字

    最近公司要搞微信活动页面,要实现图片上可以写自己名字的功能,于是就查了一下怎么实现,下面贴一下代码备忘,希望大家也能用到: 我是在控制台应用程序里进行试验的. using (Image bitmap ...

  3. 微软CodeDom模型学习笔记(全)

    CodeDomProvider MSDN描述 CodeDomProvider可用于创建和检索代码生成器和代码编译器的实例.代码生成器可用于以特定的语言生成代码,而代码编译器可用于将代码编译为程序集. ...

  4. Oracle分区表

    先说句题外话-   欢迎成都天府软件园的小伙伴来面基交流经验~ 一:什么是分区(Partition)? 分区是将一个表或索引物理地分解为多个更小.更可管理的部分. 分区对应用透明,即对访问数据库的应用 ...

  5. 记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比

    一.MongoDB3.0.x的版本特性(相对于MongoDB2.6及以下): 增加了wiredtiger引擎: 开源的存储引擎: 支持多核CPU.充分利用内存/芯片级别缓存(注:10月14日刚刚发布的 ...

  6. shell九九乘法表

    #!/bin/bash ..}; do ..}; do if [ $x -ge $y ]; then echo -ne "$y*$x=$[$y*$x] \t" fi done ec ...

  7. android 学习JSON

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  8. 解决Android Graphical Layout 界面效果不显示

    解决Android Graphical Layout 界面效果不显示 qq463431476

  9. kafka集群安装

    主要需要设置的是conf文件夹中的server.properties文件, broker.id,不同的机器节点,使用不同的id号,不能重复. num.network.threads=8 num.par ...

  10. 洛谷P2055 [ZJOI2009]假期的宿舍 [二分图最大匹配]

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...