1. 程式人生 > >基於Ubuntu 14.04 LTS編譯Android4.4.2源碼

基於Ubuntu 14.04 LTS編譯Android4.4.2源碼

.html emd sse url ice 下載源 rime class onf

版權聲明:本文為博主原創文章,未經博主同意不得轉載。

https://blog.csdn.net/gobitan/article/details/24367439

基於Ubuntu 14.04 LTS編譯Android4.4.2源碼? ? ? ? Dennis Hu 2014-4-21環境準備:基本環境:ubuntu-14.04-desktop-64bit LTS(裸機或者Windows下虛擬機安裝均可,12.04也能夠,但10.04眼下不支持了)其它要求:空暇磁盤空間100G以上,代碼部分接近10G,其它為git和編譯中間和目標文件準備
==========================================第一部分:環境初始化==========================================1. 安裝Oracle JDK註意:假設編譯Android4.4不能用OpenJDK。必須用Oracle JDK1.6。1.7眼下是不支持的。

具體怎樣安裝Oracle JDK,請參見我的還有一篇單獨的文章。[Ubuntu Linux下安裝Oracle JDK]?http://blog.csdn.net/gobitan/article/details/24322561.2. 安裝必備工具軟件註意:這裏與官方的有個包不同,官方的包會報錯.

$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-dri:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
3. 配置USB訪問權限 將例如以下內容增加到/etc/udev/rules.d/51-android.rules文件裏
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
然後運行例如以下命令,將上述文件裏的username替換為你的用戶名。

$sudo sed -i ‘s/username/dennis/g‘ /etc/udev/rules.d/51-android.rules
4. 配置ccache 安裝ccache並將export USE_CCACHE=1增加到~/.bashrc中。


$sudo apt-get install ccache
$source ~/.bashrc

========================================== 第二部分:源碼下載 ==========================================? 1. 安裝repo (1) 創建文件夾
$ mkdir ~/bin
$ PATH=~/bin:$PATH
(2) 下載repo工具 註:因為防火墻的原因。官方提供的鏈接無法使用。需替換為例如以下: 官方的為curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 可用的:
curl http://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo
(3) 增加可運行權限
$ chmod a+x ~/bin/repo
2. 初始化Repoclient (1)創建文件夾
$mkdir aosp
$cd aosp

(2) 初始化repo 註:後面可能出現網絡錯誤,請先將例如以下內容增加到/etc/hosts中然後做後面的步驟。
74.125.71.82 www.googlesource.com
74.125.31.82 android.googlesource.com
203.208.46.172 cache.pack.google.com
59.24.3.173 cache.pack.google.com
至於為什麽要出現網絡錯誤,你懂的!

$repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.2_r2
註意:假設是在虛擬機中運行。須要採用email驗證的方式,具體參見參考資料[2]. 設置git的用戶名和郵件地址。將您的真實email地址和name替換了:
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
改動aosp/.resp/manifest.xml,將fetch=".."改為: fetch="https://android.googlesource.com/"
3. 下載源碼
$repo sync
註意:系統可能會提示你升級repo,最好不要升級,除非你有十足信息解決升級後的一系列問題。

好了。慢慢等吧,短則數小時。長則幾天幾夜!

我花了5個小時
========================================== 第三部分:源碼編譯? ========================================== 1.?設置ccache 註:aosp為源碼根文件夾

$ cd aosp
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
2. 設置輸出文件夾 略:因為我未分區,因此採用默認的out文件夾 3. 初始化編譯環境
[email protected]:~/devenv/aosp$ . build/envsetup.sh 
including device/samsung/manta/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including sdk/bash_completion/adb.bash
[email protected]:~/devenv/aosp$ 
4. 選擇編譯目標包 註:目標包的選擇跟你的硬件有關。我這裏選擇9,mako
[email protected]:~/devenv/aosp$ lunch
You‘re building on Linux
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_x86-eng
     3. aosp_mips-eng
     4. vbox_x86-eng
     5. aosp_manta-userdebug
     6. mini_mips-userdebug
     7. mini_armv7a_neon-userdebug
     8. mini_x86-userdebug
     9. aosp_mako-userdebug
     10. aosp_hammerhead-userdebug
     11. aosp_tilapia-userdebug
     12. aosp_deb-userdebug
     13. aosp_grouper-userdebug
     14. aosp_flo-userdebug
Which would you like? [aosp_arm-eng] 9
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
TARGET_PRODUCT=aosp_mako
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=KVT49L
OUT_DIR=out
============================================
[email protected]:~/devenv/aosp$ make -j4
註:j4中的數字跟你的CPU個數和核數有關。具體參見參考資料[3]. 整個編譯過程,大約花了三個小時。編譯成功後會在out文件夾下生成img文件。


5. 將img載入到物理機 (1) 將手機用USB數據線連接到機器 (2) 安裝fastboot工具

$ sudo apt-get install android-tools-fastboot
(3)?設置ANDROID_PRODUCT_OUT環境變量 將例如以下部分增加~/.bashrc文件裏:
export ANDROID_PRODUCT_OUT=/home/dennis/devenv/aosp/out/target/product/mako
然後保存運行". .bashrc"使其生效。

(4) 以fastboot模式重新啟動手機

$ adb reboot bootloader
此時手機會重新啟動,呈現一個與往不同的fastboot界面
(5) 將編譯的img刷到目標機
[email protected]:~/devenv/aosp/out$ fastboot flashall -w
--------------------------------------------
Bootloader Version...: PRIMEMD04
Baseband Version.....: I9250XXLJ1
Serial Number........: 0146A0D00600900B
--------------------------------------------
checking product...
FAILED
Device product is ‘tuna‘.
Update requires ‘mako‘.
finished. total time: 0.035s
(註:因為我的物理機三星I9250在lunch裏沒有相應的型號,因此會載入失敗,這裏這是記錄過程) =================================== 假設須要編譯其它版本號。可運行例如以下步驟,這裏選擇虛擬機用的通用版本號aosp_arm-eng。
$ cd aosp
[email protected]:~/devenv/aosp$ . build/envsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/asus/deb/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including sdk/bash_completion/adb.bash
[email protected]:~/devenv/aosp$ lunch aosp_arm-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=KVT49L
OUT_DIR=out
============================================
[email protected]:~/devenv/aosp$ make -j4
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=KVT49L
OUT_DIR=out
============================================
including ./abi/cpp/Android.mk ...
including ./art/Android.mk ...
....中間過程省略
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=588791808 blocksize=2112 total=576716800 reserve=5947392
編譯完畢,運行例如以下命令能夠將您剛build好的ROM在模擬器裏運行起來,第一次啟動的時間可能比較長:
$ emulator & 註意:假設提示找不到emulator命令,可將例如以下環境變量又一次初始化一遍(也就是每次又一次進入系統運行的時候,都須要初始化一遍),lunch後面的參數要與你編譯的ROM選項一致。

$. build/envsetup.sh
$lunch aosp_arm-eng
轉載請註明出處: 雨水:http://blog.csdn.net/gobitan/article/details/24367439?

更新日誌: 2014-4-25:增加自己編譯的ROM在模擬器裏的運行方法;
參考資料: 1.?http://source.android.com/source/initializing.html? 2.?http://source.android.com/source/downloading.html? 3.?http://source.android.com/source/building-running.html?

基於Ubuntu 14.04 LTS編譯Android4.4.2源碼