文章目錄
工具
- macbook pro 18款,16G內存,500G硬盤
- 系統版本:10.14.6
- 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:
- 這個稀鬆硬盤鏡像是可以和你的mac共享磁盤空間的,你磁盤空間實際使用多少就佔用多少
- 名稱主要注意,一定要用英文,不能使用默認中文的未命名,不然編譯的時候會報一個某個文件找不到的錯
- 一定要用英文,不能使用默認中文的未命名
- 一定要用英文,不能使用默認中文的未命名
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源碼跑在模擬器上面了.
參考鏈接
- https://www.cnblogs.com/ryanchi/archive/2016/07/18/5682186.html
- https://blog.csdn.net/qq_36006553/article/details/82860806