環境搭建
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.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop maven openjdk-7-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.8-dev → libwxgtk3.0-dev openjdk-7-jdk → openjdk-8-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/.bashrcfile: -
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
