Mac編譯android原始碼的坑
阿新 • • 發佈:2018-12-31
Mac編譯android原始碼
因為專案需要在程式碼線上編譯app,想在mac上直接編譯,省時省力。不過,配置環境過程中遇到不少坑,現在逐一記錄下來。
主要有以下幾點:
- android開發環境
- 建立大小寫敏感的分割槽
- MacPorts
- Xcode
- proguard
- 其他坑
- android開發環境自不必說;
- mac本身對大小寫不敏感,但android原始碼編譯必須要對大小寫敏感,所以必須要建立一塊大小寫敏感的分割槽,以供在上面進行編譯;
- Xcode是個坑,版本不同會帶來一些問題;
- MacPorts安裝比較簡單;
- proguard這個坑藏得比較深;
建立大小寫敏感的分割槽
建立分割槽:
sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 55g ~/android.dmg
55g是我自己分的大小,官方推薦至少40g,硬碟空間足夠的儘量分得大一些;
載入分割槽:
sudo hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android
開啟分割槽:
cd /Volumes/android/
MacPorts
兩步搞定:
1.下載安裝MacPorts;
2.通過MacPorts安裝相應工具:
- POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
- 這一步可能比較耗時,耐心等待
原始碼下載
程式碼線是通過公司vpn用repo下載的
Xcode版本
我這裡要編譯的是android4.4,對應的是Xcode5,然而我的mac上是Xcode7;
經過我的各種嘗試和google,得出結論:Xcode7不適合編譯4.4,改來改去太麻煩,不如降級;
然後我就解除安裝Xcode7,下載並安裝Xcode6,並原始碼中對以下檔案作修改:
build/core/combo/HOST_darwin-x86.mk
mac_sdk_versions_supported := 10.9 10.10
ifeq ($(mac_sdk_version) ,10.9)
Mac SDK 10.8 no longer has stdarg.h, etc
host_toolchain_header := $(HOST_TOOLCHAIN_ROOT)/lib/gcc/i686-apple
darwin$(gcc_darwin_version)/4.2.1/include
HOST_GLOBAL_CFLAGS += -isystem $(host_toolchain_header)
endif
其實就是修改相關mac_sdk_version,因為4.4是基於Xcode5的,相關mac_sdk_version是不同的;
總結:Xcode最好按需選擇版本
開始編譯
進入新分割槽
cd /Volumes/android/
開啟程式碼線
cd CodeLineName/
開始編譯
source build/envsetup.sh
lunch(記得選對平臺,不然出現各種問題就和我一樣了)
make/mmm/mm
proguard遇到的坑
其他專案都正常編譯成功了,但是當我編譯一個使用了okhttp3的專案的時候,出現以下錯誤:
Error: Can't read [[email protected]121a9334] (Can't process class [okhttp3/Address.class] (Unsupported version number [51.0] for class format))
其實這就是proguard版本過舊的問題,需要替換原始碼目錄下的proguard版本:/external/proguard
我這裡把4.4的替換為了5.21,可以暫時解決此問題。
替換之後同樣會導致其他問題,最好還是保持原有版本,需要的時候再替換。
其他坑
- 錯誤: 程式包com.sun.javadoc不存在;錯誤: 找不到符號
錯誤分析:jdk路徑有問題
正確的(OSX下):
export PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:$PATH
錯誤的:
export PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/:$PATH
區別就在於bin後面有沒有“/”,“jdk1.7.0_79.jdk”換成你自己的版本