一、安裝 0.國內鏡像 首先,推薦兩個地方,也就是國內鏡像來下載源碼,強烈建議你看完,因為都一樣的 "科大源" 、 "清華源" 註意事項:如果你不編譯源代碼,裝源代碼的磁碟格式,是任何格式都可以,但是你如果要在MacBook上編譯源代碼,那必須把磁碟格式變成Mac的日誌格式,區分大小寫的,也就是這個 ...
一、安裝
0.國內鏡像
首先,推薦兩個地方,也就是國內鏡像來下載源碼,強烈建議你看完,因為都一樣的
科大源、清華源
註意事項:如果你不編譯源代碼,裝源代碼的磁碟格式,是任何格式都可以,但是你如果要在MacBook上編譯源代碼,那必須把磁碟格式變成Mac的日誌格式,區分大小寫的,也就是這個格式:
1.安裝repo和Git
Git的話,就自行搜素怎麼安裝了,這裡介紹怎樣安裝repo。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
運行 repo help
可能會報錯,或者有提示沒有獲得完整版
問題1.提示沒有獲得完整版
問題2.提示沒有這個命令
解決第一個問題:
所以,要下載兩個文件
第一個就是clone.bundle https://gerrit.googlesource.com/git-repo/clone.bundle
第二個就是git-repo https://gerrit.googlesource.com/git-repo
將clone.bundle複製到git-repo文件夾中
然後把git-repo這個文件夾中的所有文件都複製到上面創建的~/bin/
目錄下
然後執行下麵的代碼(其實這個已經解決了第二個問題,每次更換操作目錄的時候,要得到repo的命令,都要執行這兩個方法)
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
export PATH=$PATH:$HOME/bin
再執行:repo init
得到這個界面
然後查看repo的版本,執行:repo version
到這裡,repo就已經完整地安裝完畢啦。
2.下載源碼
然後就是開始下載源代碼了
然後創建一個存放源代碼的目錄
mkdir AndroidSource
cd AndroidSource
然後呢老規矩,還是要每次用repo之前都要執行(這個暫時還沒辦法解決)
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
export PATH=$PATH:$HOME/bin
然後執行
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
用來初始化代碼目錄。
得到這個界面
成功了就是這樣。到這裡,已經得到AOSP源碼的主分支,然後你想下載其他分支,就是其它版本的代碼,你可以切換到其它版本。
cd .repo/manifests
git branch -a | cut -d / -f 3
這樣就可以得到所有的版本,我這裡選擇了,android-10.0.0_r33
這個版本,回到AOSP目錄下,執行代碼
repo init -b android-10.0.0_r33
這樣就切換到這個分支了,下載的也是Android10.0的代碼,你也可以不切換,預設下載主分支,最新的代碼,但我不建議這樣做,因為後續可能會發生一些不可知的錯誤。
當然,在上一步初始化代碼的時候,你已經知道你要下載哪個分支了,就可以直接以下代碼:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r33
然後開始同步代碼:
repo sync
然後就開始同步代碼,看到網速了吧,已經在開始同步了,看網速,我這裡下載了五六個小時,網速還是不給力的。
二、編譯
1.機器
MacBook Pro
2.JDK環境
查看JDK的安裝位置
/usr/libexec/java_home
在~/.bash_profile文件中配置JDK環境,
vim ~/.bash_profile
打開,加入你的JDK地址,配置JDK
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
export JAVA_HOME=$JAVA_HOME
source ~/.bash_profile
使得文件生效
echo $JAVA_HOME
輸出JDK配置,看看是否生效
整個過程
3.GCC環境
下載一個在終端下載一個gcc,就是命令:brew install gcc
或者下載軟體Xcode就可以了。如果你沒有brew命令,那就靠你自己解決搜索安裝brew咯,這也是一個坑。
4.可提前解決的報錯
報錯1
這個是因為我的分區不是Mac OS拓展(區分大小寫)的分區,所以就報錯了,因為的只有一塊移動硬碟,又是exFat格式的,壓縮捲不行,然後我格式化了移動硬碟,重新下載了一份代碼,夠刺激吧。
報錯2
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
這個問題一直困擾著我,但是不知道怎麼稀里糊塗地解決了,你可以嘗試著執行以下代碼:
就是增加java的堆記憶體,使得不會記憶體溢出
export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”
報錯3
這裡官方都有提示可以這樣修改:
就是修改目錄下這個文件system/sepolicy/tests/Android.bp
,去掉stl: "libc++_static"
報錯4:
這是因為沒有對應版本的SDK,查看Mac版本,我這裡是沒有10.15
在這個文件里build/soong/cc/config/x86_darwin_host.go ,添加你對應的版本
報錯4
Permission denied
許可權問題,把整個源碼都獲得許可權就可以了chmod -R 777 AOSP
報錯5
也不管啥報錯了,要先安裝port,然後再安裝以下的內容:
sudo port install gmake git gnupg
sudo port install bison
5.編譯
一切操作都在你的根目錄下麵執行
切換到Android源碼的目錄下,執行這個文件envsetup.sh
source /Volumes/lanjiabin/AndroidSource/build/envsetup.sh
或者切換到build目錄下,直接source envsetup.sh
執行lunch
會讓選擇啟動器,我選了24 ,輸入24,回車,就是這個效果
也可以直接:lunch 24
然後開始編譯代碼make -j4
其中-j後面的表示開始4個線程進行進行編譯.
根據你的CPU數量來算,我就兩個,乘以2就可以了,所以我的是4
經過漫長的等待,和多次錯誤,我終於編譯成功了,我這破電腦用了11個小時,太恐怖了,我看別人就一個小時就完事,我這差點崩潰
然後再執行
.envsetup.sh
lunch 24
emulator
再等一會,就可以看到自己的虛擬機在啟動了
好的,先告一段落。
編程中我們會遇到多少挫折?表放棄,沙漠盡頭必是綠洲。