CM12.1/13.0编译教程
环境搭建
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:
- Obtain OpenJDK 1.7 from the openjdk-r PPA
- 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: 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
注意:目前编译刚开始出现下面几行是正常现象,不影响的~
- find: 'src': No such file or directory
- find: 'phone/java': No such file or directory
- find: 'dummy': No such file or directory
再次编译
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编译教程的更多相关文章
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- CM12同步源码及编译教程
同时提供基于安卓5.0的MKL魔趣猪扒饭编译教程~[玩机组出品]魔趣猪扒饭MKL50.1编译教程http://www.oneplusbbs.com/forum.php?mod=viewthread&a ...
- hadoop2.1.0编译安装教程
由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...
- hadoop2.1.0和hadoop2.2.0编译安装教程
由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...
- TWRP基于omnirom 6.0.1编译教程
1.环境搭配 参照CM13.0编译笔记http://www.cnblogs.com/dinphy/p/5670293.html 参照SM 2.0 编译笔记http://www.cnblogs.com/ ...
- 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. ...
- Android程序开发0基础教程(一)
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一) 平台简单介绍 令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...
- CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享
一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- 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 ...
随机推荐
- [css]我要用css画幅画(五)
接着之前的[css]我要用css画幅画(四), 这次我给小明和静静增加了对话,用了简单的动画效果. github:https://github.com/bee0060/Css-Paint , 完整代码 ...
- Windows on Device 项目实践 1 - PWM调光灯制作
在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...
- Attempt to fetch logical page (...) in database 2 failed. It belongs to allocation unit xxxx not to xxx
今天一个同事说在一个生产库执行某个存储过程,遇到了错误: Fatal error 605 occurred at jul 29 2014 我试着执行该存储过程,结果出现下面错误,每次执行该存储过程,得 ...
- webapi 控制器接收POST参数时必须以对象的方式接收
webapi 控制器接收POST参数时必须以对象的方式接收
- 《java JDK7 学习笔记》之接口与多态
1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...
- 使用Navicat连接Oracle数据时的一些问题,连接时错误:ORA-28547,新建用户后连接时错误:ORA-01017
发现Navicat作为一款连接数据库的工具确实很好用,可视化的界面看着舒服很多,下面说说我今天在连接Oracle数据库时的一些问题: 1.安装好Oracle后直接用Navicat是连接不上的,会出现如 ...
- 【转】理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为 ...
- MogileFS系统简单配置实例
实验原理: MogileFS是一个开源的分布式文件系统,用于组建分布式文件集群,由LiveJournal旗下DangaInteractive公司开发,Danga团队开发了包括 Memcached.Mo ...
- 令人崩溃的@requestBody乱码一例
这个问题真是让我心力憔悴了...在客户现场对接就是乱码,StringHttpConverter怎么配置都不行... 场景其实很简单:客户那头post一个http请求,包体是json字符串,我这头spr ...
- Excel自文本导入内容时如何做到单元格内换行
前言:今天在处理数据的时候,在数据库中用到了\n换行符号,目的是在同表格内做到数据多行显示,比如 字段名1 字段名2 字段名3 1 数据一行 数据二行 数据三行 例子是在sql查询后的结果 ...