Android ROM開發之源碼搭建與ROM生成

本文基於Android 4.2.2源碼搭建環境。html

硬件配置

  1. 4G以上內存、100G以上硬盤空間:使用Intel i7內核,8G內存的PC編譯Android 2.3首次須要半小時左右,小範圍修改從新編譯在5分鐘左右;編譯Android 4.2首次編譯須要80分鐘左右,二次編譯速度也在10分鐘左右。ccache緩存機制的引入保證了編譯的高效,代價是佔據大量硬盤空間。Android 4.2源文件在10G左右,編譯文件在15G左右,若是使用多個Android版本,硬盤空間翻倍,因此建議保留100G以上的硬盤空間。
  2. 64位機器: 爲了編譯Android 2.3.x以上版本,CPU要求是64位。

檢查硬件環境: 使用df -h檢查個磁盤空間使用情況,保證/home空間充裕。java

軟件配置

  1. 操做系統: 使用Ubuntu 12.04 64-bit Desktop(此版本爲最新的長期維護穩定版本,新版的筆記本須要關閉EFTI模式)
  2. python: 要求2.6或者2.7
  3. GNU make: 嚴格要求3.8.1
  4. JDK 6: 因爲ubuntu默認安裝openJDK,爲保證穩定性,使用第三方ppa安裝JDK或者源碼安裝
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer

注:此方法須要下載69M文件,下載時間依網絡而定。python

  1. Git: 要求1.8.1以上版本,使用ppa安裝最新版本;若是網絡情況很差能夠先不升級至1.8.1
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

注:此方法須要下載23M文件,下載時間依網絡而定。安裝完後須要設置global信息linux

git config --global user.email "you@example.com"
git config --global user.name "Your Name"
  1. ccache:緩存設置

安裝android

$ sudo apt-get install ccache

設置PATHgit

$ echo "export USE_CCACHE=1" >> ~/.bashrc
$ source ~/.bashrc

測試設置成功web

$ echo $USE_CCACHE
  1. 相關依賴包:僅適用於12.04,其它操做系統依參考資料1而定。
$ sudo apt-get install git gnupg flex bison gperf build-essential \
 zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
 libgl1-mesa-dev g++-multilib mingw32 tofrodos \
 python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

全部軟件安裝完畢,使用java -version等命令檢查版本正確ubuntu

源碼下載與配置

工做目錄**/home/${user}/**vim

源碼下載

  1. 下載repo: repo是基於git開發的一套源碼下載工具,能夠實現並行下載。

設置目錄和repo的PATHapi

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

注:此處若網絡出錯,多是GFW緣由。在IPV6網絡下能夠添加hosts,參考ipv6 hosts,不然進行源碼安裝。

  1. 下載Android源碼4.2.2:

設置工做目錄

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

下載源碼

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1.2b
$ repo sync

注:源文件大小爲10G左右,喝杯茶,扭扭脖子休息一下吧。

源碼編譯配置

查看CPU核數,此參數用於並行編譯

$ cat /proc/cpuinfo |grep "cores"|uniq

個人輸出: cpu cores: 4; 因而並行編譯時參數位-j8(即4×2)

編譯:

$ source build/envelop.sh

ROM開發

$ lunch full_eng
$ make -j8

lunch: lunch用於選擇不一樣的機型,full_eng爲生成適合虛擬機的ROM。

編譯完成後將在out目錄下生成相應的ROM以及工具。

SDK開發

$ lunch sdk_eng
$ make sdk

在out目錄下會生成sdk,用於app的開發

虛擬機運行

編譯虛擬機運行腳本

$ echo "out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7 -sdcard sdcard.img -skindir sdk/emulator/skins -skin WQVGA400 -memory 512 -partition-size 1024" > run.sh

$ chmod a+x run.sh
$ ./run.sh

虛擬機啓動成功,Android ROM自動加載運行,完成。

參考

  1. Android Donwloading and Building

問題

問題1:

error: error reading out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar; invalid header field
1 error
make: *** [out/target/common/obj/APPS/FrameworksCoreTests_intermediates/classes-full-debug.jar] Error 41

解決1:

$ make clean # 刪除臨時編譯的文件
$sudo update-alternatives --config jar 選擇相應包

參考

問題2:

make: *** [out/target/common/docs/online-gcm-ref-timestamp] Error 45

解決2:

$ git revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e

服務器配置

網絡環境

配置IP與DNS

vim /etc/networking/interfaces

auto eth0
iface eth0 inet static
address 10.109.254.15
netmask 255.255.255.0
gateway 10.109.254.1
#dns-nameservers 10.3.9.4 10.3.9.5

配置DNS

vim /etc/resolv.conf

nameserver 10.3.9.4
nameserver 10.3.9.5

重啓網絡

/etc/init.d/networking restart

安裝ssh

sudo apt-get install ssh

安裝VNC

sudo apt-get install vnc4server
vncserver  :3
相關文章
相關標籤/搜索