MacBooK pro編譯Android 8.1源碼

工具

  1. macbook pro 18款,16G內存,500G硬盤
  2. 系統版本:10.14.6
  3. java 8,xcode是最新的10.3

原料

1.Android源碼一份 https://pan.baidu.com/s/113Bp4qial-wzRhJmwIOfRQ
2.macPorts 一份 https://www.macports.org/install.php
3.macOS 10.12 SDK一份 https://github.com/phracker/MacOSX-SDKs/releases
4.HAXM 一份 https://github.com/intel/haxm/releases

操作步驟

開始之前請先確認自己的java環境已經Android環境已經配置好,你要是Android開發,一般沒什麼問題

1. 下載源碼

下載Android8.1的Android源碼,得到android-8.1.0_r1壓縮包,自己也可以去下載,不過這個時間會非常的長,根據個人口味選擇

2. 創建磁盤映像

創建一個不少於150G的磁盤映像,我編譯下載實際佔用120G多一點

通過命令創建

$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 190g ~/自己想要配置的路徑/android.dmg

通過磁盤工具創建

[外鏈圖片轉存失敗(img-3ilcqyWq-1568632750179)(https://raw.githubusercontent.com/adonis-lsh/image_storage/master/19-9-16/15686221154315.jpg)]
[外鏈圖片轉存失敗(img-Cvkfi6bR-1568632750180)(https://raw.githubusercontent.com/adonis-lsh/image_storage/master/19-9-16/15686222064457.jpg)]

note:

  1. 這個稀鬆硬盤鏡像是可以和你的mac共享磁盤空間的,你磁盤空間實際使用多少就佔用多少
  2. 名稱主要注意,一定要用英文,不能使用默認中文的未命名,不然編譯的時候會報一個某個文件找不到的錯
  3. 一定要用英文,不能使用默認中文的未命名
  4. 一定要用英文,不能使用默認中文的未命名

3.安裝macPorts軟件

如果不出意外的話,你在安裝macPorts肯定會卡住,因爲這個軟件同步源的默認網址那是相當的慢,有人說開全局VPN,實際上還是不行,那怎麼辦?先強制退出安裝器,點擊mac的重啓按鈕是,它會自動彈出來一個安裝進程的一個彈窗,在強制退出,當然你通過命令找到它關掉也可以.然後然後是更換源,手動更新,一般安裝的時候環境變量就自動配置好了.

$ cd /opt/local/etc/macports/

找到下面的sources.conf文件夾,通過vi編輯器來修改這一行代碼

rsync://rsync.macports.org/macports/release/tarballs/ports.tar [default]

改爲

https://distfiles.macports.org/ports.tar.gz [default]

再來手動進行更新源

$ sudo port -d sync

安裝Make、Git 和 GPG 軟件包

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

4.下載Mac SDK 10.12

正常情況下你現在編譯肯定會報錯:Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13”]

所以我們直接下一個10.12 SDK放進去,網上有人說修改文件什麼的,在我電腦上面我也沒有找到那個文件,還是添加SDK方法的好使,一勞永逸

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

把下載的sdk包解壓到上面的路徑即可

5.解除文件數量限制

解除mac同時打開文件數量的限制:
$ sudo vi ~/.bash_profile

添加

# set the number of open files to be 1024
ulimit -S -n 1024

也可以再大一點

6.設置bison

這個一般都會有問題,所以編譯之前先測試一下,cd到你解壓Android源碼的地方,執行

prebuilts/misc/darwin-x86/bison/bison --version

如果顯示是Abort trap: 6,則是有問題,如果不處理的話,編譯的過程中則會報

ninja: build stopped: subcommand failed.
ninja failed with: exit status 1

解決方案:

有人說安裝bison通過軟連接來進行處理,實測不行,

1.創建patch-high-sierra.patch

cd external/bison
touch patch-high-sierra.patch
sudo vi patch-high-sierra.patch

插入以下內容

With format string strictness, High Sierra also enforces that %n isn't used
in dynamic format strings, but we should just disable its use on darwin in
general.
 
--- lib/vasnprintf.c.orig   2017-06-22 15:19:15.000000000 -0700
+++ lib/vasnprintf.c    2017-06-22 15:20:20.000000000 -0700
@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
 #endif
                   *fbp = dp->conversion;
 #if USE_SNPRINTF
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
                 fbp[1] = '%';
                 fbp[2] = 'n';
                 fbp[3] = '\0';

2.編譯

patch -p0 < patch-high-sierra.patch  
mm

如果沒有mm命令,在源碼根目錄執行,然後回來在執行

source build/envsetup.sh
lunch 24

3.拷貝

cp ./out/host/darwin-x86/obj/EXECUTABLES/bison_intermediates/bison ./prebuilts/misc/darwin-x86/bison/bison 

4.驗證

最後通過命令驗證是否設置成功

prebuilts/misc/darwin-x86/bison/bison --version

正常會提示一個版本號,我的提示是2.7

7.設置JVM的最大堆棧

爲了防止OOM,直接提前設置一下.
sudo vi ./prebuilts/sdk/tools/jack-admin
編輯文件,找到

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}"

在後面添加-Xmx8192M,這個根據自己電腦的內存大小自己設置.

JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -Xmx8192M}"

8.下載驅動

驅動不要下載錯,選擇android-8.1.0_r1和對應的版本

https://developers.google.com/android/drivers

最後解壓到源碼根目錄,執行.sh文件,會在源碼中創建vendor文件夾

9.編譯

1.清除一下原來的緩存
make clobber

2.設置環境
source build/envsetup.sh

3.選擇版本,我選擇的是6
lunch

4.編譯
根據自己的實際情況選擇合適的線程數
make -j8

5.等待奇蹟出現

10.模擬器

1.編譯好以後,運行emulator,不出意外,你會得到:

Failed to open the hax module
Warning: requested RAM 2048M too high for your system. Reducing to maximum supported size 0M
Hax is enabled
Hax ram_size 0x0
Failed to open the hax module
No accelerator found.
failed to initialize HAX: Operation not supported by device

明明自己AS裏面的模擬器加速沒問題,爲什麼還是提示不能加速呢,解決方案,自己下一個安裝一下就好,地址在上面.最後你就可以把自己編譯的Android源碼跑在模擬器上面了.

參考鏈接

  1. https://www.cnblogs.com/ryanchi/archive/2016/07/18/5682186.html
  2. https://blog.csdn.net/qq_36006553/article/details/82860806
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章