Ubuntu14.04下搭建android5.1編譯環境


  官網上教程:http://source.android.com/source/building.html,基本是按照這個一步一步來的。

一、初始化配置

1.安裝jdk7(5.1需要openjdk7,其他版本看文檔)

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk

更新默認jdk版本

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

2.1404需要下載的依賴

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip

我的出現如下錯誤

下列軟件包有未滿足的依賴關系:
 g++-multilib : 依賴: gcc-multilib (>= 4:4.8.2-1ubuntu6) 但是它將不會被安裝
                依賴: g++ (>= 4:4.8.2-1ubuntu6) 但是它將不會被安裝
E: 無法修正錯誤,因為您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關系

分別安裝gcc-multilib和g++即可:

sudo apt-get install g++
sudo apt-get install gcc-multilib

 3.配置USB訪問權限

新建/etc/udev/rules.d/51-android.rules文件,可以使用 sudo gedit /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>替換為系統的用戶名。

4.配置輸出目錄

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

5.設置ccache

export USE_CCACHE=1

默認存放在~/.ccache,如果是NFS文件系統還需特別指定:

export CCACHE_DIR=<path-to-your-cache-directory>

建議cache大小50-100G,源碼下載完后執行:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

環境配置完成,接下來下載源碼。

二、源碼下載

1.安裝Repo

新建bin目錄並添加到環境變量中:

$ mkdir ~/bin
$ PATH=~/bin:$PATH

下載Repo

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

由於國內被牆,google可能無法下載,推薦使用tsinghua的aosp源下載:

git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/

拷貝到bin目錄並添加權限:

cp git-repo/repo ~/bin/
chmod a+x ~/bin/repo

 

修改repo文件,設置REPO_URL如下:

REPO_URL = 'git://aosp.tuna.tsinghua.edu.cn/android/git-repo'

2.初始化repo

創建源碼下載目錄:

$ mkdir ~/source
$ cd ~/srouce

初始化repo

$ repo init -u https://android.googlesource.com/platform/manifest

google連不上的可以用這個:

repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest

此命令默認下載master分支的最新版本,此時即5.1,如果要指定版本,需要加-b,如下:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
各個版本代號如下:
Build    Branch    Version    Supported devices
LMY47Z    android-5.1.1_r4    Lollipop    Nexus 6 (For Sprint, USC ONLY)
LMY48B    android-5.1.1_r3    Lollipop    Nexus 5
LMY47X    android-5.1.1_r2    Lollipop    Nexus 9 (volantis)
LMY47V    android-5.1.1_r1    Lollipop    Nexus 7 (flo/grouper), Nexus 10, Nexus Player
LMY47O    android-5.1.0_r5    Lollipop    Nexus 4, Nexus 7 (flo/deb)
LMY47M    android-5.1.0_r4    Lollipop    Nexus 6 (For T-Mobile ONLY)
LMY47I    android-5.1.0_r3    Lollipop    Nexus 5, Nexus 6
LMY47E    android-5.1.0_r2    Lollipop    Nexus 6
LMY47D    android-5.1.0_r1    Lollipop    Nexus 5, Nexus 6, Nexus 7 (grouper/tilapia), Nexus 10, Nexus Player
LRX22L    android-5.0.2_r3    Lollipop    Nexus 9 (volantis/volantisg)
LRX22G    android-5.0.2_r1    Lollipop    Nexus 7 (flo/deb/grouper/tilapia), Nexus 10
LRX22C    android-5.0.1_r1    Lollipop    Nexus 4, Nexus 5, Nexus 6 (shamu), Nexus 7 (flo), Nexus 9 (volantis/volantisg), Nexus 10
LRX21V    android-5.0.0_r7.0.1    Lollipop    Nexus Player (fugu)
LRX21T    android-5.0.0_r6.0.1    Lollipop    Nexus 4
LRX21R    android-5.0.0_r5.1.0.1    Lollipop    Nexus 9 (volantis)
LRX21Q    android-5.0.0_r5.0.1    Lollipop    Nexus 9 (volantis)
LRX21P    android-5.0.0_r4.0.1    Lollipop    Nexus 7 (flo/grouper), Nexus 10
LRX21O    android-5.0.0_r3.0.1    Lollipop    Nexus 5 (hammerhead), Nexus 6 (shamu)
LRX21M    android-5.0.0_r2.0.1    Lollipop    Nexus Player (fugu)
LRX21L    android-5.0.0_r1.0.1    Lollipop    Nexus 9 (volantis)
KTU84Q    android-4.4.4_r2    KitKat    Nexus 5 (hammerhead) (For 2Degrees/NZ, Telstra/AUS and India ONLY)
KTU84P    android-4.4.4_r1    KitKat    Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10
KTU84M    android-4.4.3_r1.1    KitKat    Nexus 5 (hammerhead)
KTU84L    android-4.4.3_r1    KitKat    Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10
KVT49L    android-4.4.2_r2    KitKat    Nexus 7 (deb Verizon)
KOT49H    android-4.4.2_r1    KitKat    Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10
KOT49E    android-4.4.1_r1    KitKat    Nexus 5, Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10
KRT16S    android-4.4_r1.2    KitKat    Nexus 7 (flo/deb/grouper/tilapia), Nexus 4, Nexus 10
KRT16M    android-4.4_r1    KitKat    Nexus 5 (hammerhead)
JLS36I    android-4.3.1_r1    Jelly Bean    Nexus 7 (deb)
JLS36C    android-4.3_r3    Jelly Bean    Nexus 7 (deb)
JSS15R    android-4.3_r2.3    Jelly Bean    Nexus 7 (flo)
JSS15Q    android-4.3_r2.2    Jelly Bean    Nexus 7 (flo)
JSS15J    android-4.3_r2.1    Jelly Bean    Nexus 7 (flo/deb)
JSR78D    android-4.3_r2    Jelly Bean    Nexus 7 (deb)
JWR66Y    android-4.3_r1.1    Jelly Bean    Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10
JWR66V    android-4.3_r1    Jelly Bean    Galaxy Nexus, Nexus 7 (grouper/tilapia), Nexus 4, Nexus 10
JWR66N    android-4.3_r0.9.1    Jelly Bean    Galaxy Nexus, Nexus 7 (grouper/tilapia/flo), Nexus 4, Nexus 10
JWR66L    android-4.3_r0.9    Jelly Bean    Nexus 7
JDQ39E    android-4.2.2_r1.2    Jelly Bean    Nexus 4
JDQ39B    android-4.2.2_r1.1    Jelly Bean    Nexus 7
JDQ39    android-4.2.2_r1    Jelly Bean    Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10
JOP40G    android-4.2.1_r1.2    Jelly Bean    Nexus 4
JOP40F    android-4.2.1_r1.1    Jelly Bean    Nexus 10
JOP40D    android-4.2.1_r1    Jelly Bean    Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10
JOP40C    android-4.2_r1    Jelly Bean    Galaxy Nexus, Nexus 7, Nexus 4, Nexus 10
JZO54M    android-4.1.2_r2.1    Jelly Bean    
JZO54L    android-4.1.2_r2    Jelly Bean    
JZO54K    android-4.1.2_r1    Jelly Bean    Nexus S, Galaxy Nexus, Nexus 7
JRO03S    android-4.1.1_r6.1    Jelly Bean    Nexus 7
JRO03R    android-4.1.1_r6    Jelly Bean    Nexus S 4G
JRO03O    android-4.1.1_r5    Jelly Bean    Galaxy Nexus
JRO03L    android-4.1.1_r4    Jelly Bean    Nexus S
JRO03H    android-4.1.1_r3    Jelly Bean    
JRO03E    android-4.1.1_r2    Jelly Bean    Nexus S
JRO03D    android-4.1.1_r1.1    Jelly Bean    Nexus 7
JRO03C    android-4.1.1_r1    Jelly Bean    Galaxy Nexus
IMM76L    android-4.0.4_r2.1    Ice Cream Sandwich     
IMM76K    android-4.0.4_r2    Ice Cream Sandwich    Galaxy Nexus
IMM76I    android-4.0.4_r1.2    Ice Cream Sandwich    Galaxy Nexus
IMM76D    android-4.0.4_r1.1    Ice Cream Sandwich    Nexus S, Nexus S 4G, Galaxy Nexus
IMM76    android-4.0.4_r1    Ice Cream Sandwich    
IML77    android-4.0.3_r1.1    Ice Cream Sandwich    
IML74K    android-4.0.3_r1    Ice Cream Sandwich    Nexus S
ICL53F    android-4.0.2_r1    Ice Cream Sandwich    Galaxy Nexus
ITL41F    android-4.0.1_r1.2    Ice Cream Sandwich    Galaxy Nexus
ITL41D    android-4.0.1_r1.1    Ice Cream Sandwich    Galaxy Nexus
ITL41D    android-4.0.1_r1    Ice Cream Sandwich    Galaxy Nexus
GWK74    android-2.3.7_r1    Gingerbread    Nexus S 4G
GRK39F    android-2.3.6_r1    Gingerbread    Nexus One, Nexus S
GRK39C    android-2.3.6_r0.9    Gingerbread    Nexus S
GRJ90    android-2.3.5_r1    Gingerbread    Nexus S 4G
GRJ22    android-2.3.4_r1    Gingerbread    Nexus One, Nexus S, Nexus S 4G
GRJ06D    android-2.3.4_r0.9    Gingerbread    Nexus S 4G
GRI54    android-2.3.3_r1.1    Gingerbread    Nexus S
GRI40    android-2.3.3_r1    Gingerbread    Nexus One, Nexus S
GRH78C    android-2.3.2_r1    Gingerbread    Nexus S
GRH78    android-2.3.1_r1    Gingerbread    Nexus S
GRH55    android-2.3_r1    Gingerbread    earliest Gingerbread version, Nexus S
FRK76C    android-2.2.3_r2    Froyo     
FRK76    android-2.2.3_r1    Froyo    
FRG83G    android-2.2.2_r1    Froyo    Nexus One
FRG83D    android-2.2.1_r2    Froyo    Nexus One
FRG83    android-2.2.1_r1    Froyo    Nexus One
FRG22D    android-2.2_r1.3    Froyo    
FRG01B    android-2.2_r1.2    Froyo    
FRF91    android-2.2_r1.1    Froyo    Nexus One
FRF85B    android-2.2_r1    Froyo    Nexus One
EPF21B    android-2.1_r2.1p2    Eclair     
ESE81    android-2.1_r2.1s    Eclair    
EPE54B    android-2.1_r2.1p    Eclair    Nexus One
ERE27    android-2.1_r2    Eclair    Nexus One
ERD79    android-2.1_r1    Eclair    Nexus One
ESD56    android-2.0.1_r1    Eclair    
ESD20    android-2.0_r1    Eclair     
DMD64    android-1.6_r1.5    Donut     
DRD20    android-1.6_r1.4        
DRD08    android-1.6_r1.3        
DRC92    android-1.6_r1.2        
View Code

如果是首次使用git會提示email驗證,輸入如下命令:

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

3.替換已有的AOSP源代碼的remote

如果你之前已經通過某種途徑獲得了AOSP的源碼,但是你希望以后通過TUNA同步,只需要將.repo/manifest.xml中的 

    <remote  name="aosp"
       fetch=".."
       review="https://android-review.googlesource.com/" />

改為

      <remote  name="aosp"
       fetch="git://aosp.tuna.tsinghua.edu.cn/android/"
       review="https://android-review.googlesource.com/" />

4.下載源碼

$ repo sync

這一步要等好久..好久...好久....repo可以看做git的升級版,有斷點續傳的功能,所以慢慢下吧,5.1大概下了30G

三、源碼編譯

1.初始化

執行 $ source build/envsetup.sh 或 $ . build/envsetup.sh 

2.選擇平台編譯選項

$ lunch aosp_arm-eng

可以僅輸入lunch來選擇可選的編譯目標。其中各個參數含義為,eng: 工程機,user:最終用戶機,userdebug:調試測試機,tests:測試機

3.編譯

make

如果開發機器配置較好,例如雙核四線程,可以使用

make -j4

當然也可以使用 make -j16make -j32,make失敗或停止后,可以使用make -k 繼續編譯。

接下來又是漫長的等待過程。等。。。等。。。等。。。。

若干小時候,出現錯誤:

build/core/shared_library_internal.mk:68 recipe for target 'out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so' failed

make: ** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] Error 1

make: ** Deleting file 'out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/

按照http://jileniao.net/ubunt-add-swap-to-build-libwebviewchromium.html的方法解決。

1.#dd if=/dev/zero of=/opt/swap1 bs=1024 count=1024000

  (count的值等於1024 x 你想要的文件大小, 4096000是4G,1024000是1G)

2.#mkswap /opt/swap1

 (把這個文件變成swap文件)

3.#swapon /opt/swap1

 (啟用這個swap文件)

4.為了使每次開機時都能正常使用swap文件,所以這里需要把swap文件增加到fstab文件中

 #sudo vi /etc/fstab

 在最后一行增加如下內容

 /opt/swap1 swap swap defaults 0 0

重復上述4步,再次增加一個/opt/swap2的文件。

據說增加內存也可以,我也沒試過。

4.結果展示

啟動模擬器: emulator & 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM