編譯Android源碼(9.0)

參考了官方文檔和前輩們的編譯經驗,但還是遇到了不少坑,在這裏記錄一下過程。
官方文檔地址:https://source.android.google.cn/source/downloading
下面寫一下具體步驟:

1. 新建大小寫敏感的磁盤映像

編譯需要大小寫敏感的環境,mac如果沒有自行更改過磁盤格式默認是大小寫不敏感的,所以要在mac上劃分出一個大小寫敏感的磁盤映像。前輩們建議150G,然而我編譯後就剩幾百M了,打開模擬器運行需要1.5G提示剩餘空間不夠T_T,所以建議更大一點160G應該可以了,如果是更高版本的源碼建議更大。使用mac應用程序列表中的磁盤工具–>文件(左上角)–>新建映像–>空白映像,這裏我創建了叫AOSP的盤
在這裏插入圖片描述

2.系統環境準備

JDK8:這個就不多說了,配好環境變量
Git:按照google的要求需要吧git郵箱設置google郵箱
GnuPG:加密工具,否則連初始化倉庫都過不去,參考repo init報錯1
XCode:默認自帶的XcodeSDK版本過高,一定要下載一箇舊版本的,否則編譯時報錯,參考最後編譯報錯1
xz解壓工具:一定要有否則編譯報錯,參考最後編譯報錯2
VPN:最好有一個,主要下載repo用,源碼文件比較大總共大概33G還是用鏡像地址比較好

3.安裝repo

1>確保主目錄下有一個 bin/ 目錄,並且該目錄包含在路徑中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2>下載 Repo 工具,修改執行權限:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

4. 創建源碼目錄

進入到剛纔創建的磁盤映像,創建WORKING_DIRECTORY源碼目錄,依次執行命令

$ cd /Volumes/AOSP
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

5. 初始化repo

這裏就需要考慮網絡的問題的,國內Google服務器,VPN網速一般又比較慢,很容易出現問題,所以建議直接用清華的鏡像地址,否則此處可能會報錯,參考repo報錯1(註釋掉的是google原地址)
如果要下載全部源代碼:

// $ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest

只下載某一分支代碼:

// $ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-9.0.0_r33

建議只下載分支,僅9.0分支就有30多G
如果沒有安裝GnuPG,這裏會報錯warning: gpg (GnuPG) is not available,參考repo報錯2

6.下載源碼

$ repo sync

漫長的等待下載開始了,預計10M/s的網速預計需要一個半小時下載,好在repo同步時會檢查是否已下載過,等於多了斷點下載機制,不用擔心下載中端,每次重新sync就行。這裏如果出現錯誤,參考repo報錯3

7.初始化編譯環境

仍舊在下載源碼目錄下執行命令初始化編譯環境

$ source build/envsetup.sh

選擇要編譯的cpu架構

$ lunch

然後會出現一個列表讓選擇,不知道怎麼選直接按enter鍵,會自動選擇一個默認的

8.編譯源碼

$ make -j30

數字30代表使用的線程數量,前輩們經驗CPU併發線程數的1~2倍,我8核的30線程比第一次編譯時18線程快了很多,又是漫長的等待預計1~2小時吧
在這裏插入圖片描述
看到這個畫面就大功告成了

9.模擬器運行

$ emulator

試試能跑起來就ok。我沒跑起來因爲劃分的150G提示空間不足,我只是需要源碼,就沒花時間再重試。

10.源碼導入Android Studio

執行命令生成IntelJ工程文件

$ mmm development/tools/idegen/
$ . development/tools/idegen/idegen.sh

點擊最後生成的android.ipr即可打開源碼,如果這個文件沒有倍AS識別,那就先打開AS通過open project的形式打開。

生成的源碼目錄非常大有140多G,最好把out(60多G)、cts、test等沒什麼用的文件夾刪了,如果不需要再次編譯把.repo(30多G)文件夾也刪了要不然AS第一次打開會非常非常慢…

報錯解決

repo報錯

1. fatal: Cannot get https://gerrit.googlesource.com/git-repo

原因:牆的原因,使用鏡像地址。
解決方法:找到剛纔安裝repo創建的bin目錄,打開repo文件,修改REPO_URL鏈接

import os
REPO_URL = os.environ.get('REPO_URL', None)
if not REPO_URL:
  # REPO_URL = 'https://gerrit.googlesource.com/git-repo'
  REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
REPO_REV = 'stable'
2. warning: gpg (GnuPG) is not available. warning: Installing it is strongly encouraged.

原因:未安裝GnuPG
解決方法:
下載安裝地址 https://www.gnupg.org/download/
注意:需要導入Google的公鑰,要不然會報no public key

$ gpg --import 

然後粘貼公鑰

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----

Control + D結束輸入。導入完畢
如果是安裝完畢第一次使用gpg命令會提示需要link到gunpg,按提示輸入命令就行了

3. android error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

原因:不要懷疑!不要相信網上說的是git緩存區太小問題等等!就是你的網不行,找個網速好的地兒重新repo sync代碼!

編譯報錯:

1. Could not find a supported mac sdk: [“10.10” “10.11” “10.12”]

原因:mac支持編譯的找不到sdk(xcode的sdk)
解決方法:下載提示版本的sdk解壓到系統的sdk目錄
別人收集的各版本sdk:https://github.com/phracker/MacOSX-SDKs/releases
Command+Shift+G進入到目錄:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
把解壓的sdk放到與系統自帶的sdk平級

2. /bin/bash: xz: command not found

原因:未安裝xz解壓工具
解決方法:下載xz安裝:http://tukaani.org/xz/
下載安裝包後依次執行命令解壓安裝:
$ tar -zxf xz-5.2.3.tar.gz
$ cd xz-5.2.3
$ ./configure
$ make
$ make install
執行$ xz -V 驗證安裝是否成功(能看到版本號就ok)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章