一、安裝
0.國內鏡像
首先,推薦兩個地方,也就是國內鏡像來下載源碼,強烈建議你看完,因為都一樣的 科大源、清華源 注意事項:如果你不編譯源代碼,裝源代碼的磁盤格式,是任何格式都可以,但是你如果要在MacBook上編譯源代碼,那必須把磁盤格式變成Mac的日誌格式,區分大小寫的,也就是這個格式:
1.安裝repo和Git
Git的話,就自行搜索怎麼安裝了,這裡介紹怎樣安裝repo。
<code>mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo/<code>
運行 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的命令,都要執行這兩個方法)
<code>echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin /<code>
再執行:repo init 得到這個界面
然後查看repo的版本,執行:repo version
到這裡,repo就已經完整地安裝完畢了。
2.下載源碼
然後就是開始下載源代碼了 然後創建一個存放源代碼的目錄
<code>mkdir AndroidSource cd AndroidSource/<code>
然後呢老規矩,還是要每次用repo之前都要執行(這個暫時還沒辦法解決)
<code>echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc export PATH=$PATH:$HOME/bin /<code>
然後執行
<code>repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest/<code>
用來初始化代碼目錄。 得到這個界面
成功了就是這樣。到這裡,已經得到AOSP源碼的主分支,然後你想下載其他分支,就是其它版本的代碼,你可以切換到其它版本。
<code>cd .repo/manifests git branch -a | cut -d / -f 3 /<code>
這樣就可以得到所有的版本,我這裡選擇了,android-10.0.0_r33這個版本,回到AOSP目錄下,執行代碼 repo init -b android-10.0.0_r33這樣就切換到這個分支了,下載的也是Android10.0的代碼,你也可以不切換,默認下載主分支,最新的代碼,但我不建議這樣做,因為後續可能會發生一些不可知的錯誤。 當然,在上一步初始化代碼的時候,你已經知道你要下載哪個分支了,就可以直接以下代碼:
<code>repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r33/<code>
然後開始同步代碼:
<code>repo sync/<code>
然後就開始同步代碼,看到網速了吧,已經在開始同步了,看網速,我這裡下載了五六個小時,網速還是不給力的。
二、編譯
1.機器
MacBook Pro
2.JDK環境
查看JDK的安裝位置 /usr/libexec/java_home
在~/.bash_profile文件中配置JDK環境, vim ~/.bash_profile 打開,加入你的JDK地址,配置JDK
<code>export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home export JAVA_HOME=$JAVA_HOME/<code>
source ~/.bash_profile 使得文件生效 echo $JAVA_HOME 輸出JDK配置,看看是否生效 整個過程
3.GCC環境
下載一個在終端下載一個gcc,就是命令:brew install gcc 或者下載軟件Xcode就可以了。如果你沒有brew命令,那就靠你自己解決搜索安裝brew卡,這也是一個坑。
4.可提前解決的報錯
報錯1
這個是因為我的分區不是Mac OS拓展(區分大小寫)的分區,所以就報錯了,因為的只有一塊移動硬盤,又是exFat格式的,壓縮卷不行,然後我格式化了移動硬盤,重新下載了一份代碼,夠刺激吧。
報錯2
<code>Exception in thread "main" java.lang.OutOfMemoryError: Java heap space/<code>
這個問題一直困擾著我,但是不知道怎麼稀裡糊塗地解決了,你可以嘗試著執行以下代碼: 就是增加java的堆內存,使得不會內存溢出
<code>export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”/<code>
報錯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,然後再安裝以下的內容:
<code>sudo port install gmake git gnupg sudo port install bison/<code>
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個小時,太恐怖了,我看別人就一個小時就完事,我這差點崩潰
然後再執行
<code>.envsetup.sh lunch 24 emulator/<code>
再等一會,就可以看到自己的虛擬機在啟動了
好的,先告一段落。
編程中我們會遇到多少挫折?表放棄,沙漠盡頭必是綠洲。