轉載注明出處:簡書-十個雨點
本文只記錄如何跑通、編譯AOSP,以及我自己遇到的坑,不討論復雜問題,因為我也不會。
首先只要準備以下三樣東西:
不急不躁慢慢來的自己!!!
按部就班的配置環境
根據AOSP官方教程檢查你的環境,如果linux版本不對的話,最省事的方法就是重裝成對應的版本,不過如果不想重裝也沒關系,頂多就是碰到一些坑,谷歌和百度總能找到辦法的....
跟著AOSP官方教程——搭建環境的步驟進行配置和安裝,一步一步來,一定能成功的,如果不能,看看上一段話我怎么說的吧。
其中有這么一個問題,就是JDK版本不對怎么辦,教程里是這么說的,安裝了正確的版本后,還需要調整使用的版本:
Update the default Java version - optional
Optionally, for the Ubuntu versions above update the default Java version by running:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
但是其實是不完全的,因為這還是會導致編譯失敗,還得加上:
$ sudo update-alternatives --config jar
$ sudo update-alternatives --config javadoc
如果編譯的時候還有其他java工具的錯誤,也同樣用這種方式解決就好了。
下載源碼
先說明兩點:
- 使用中科大鏡像的方法一,得到的是master分支的最新代碼
- 使用中科大鏡像的方法二,可以選擇自己想要的分支進行同步
有什么區別呢?
先看看上面AOSP倉庫master分支對應的驅動,如果你手頭的設備在里頭,就表示master分支可以直接編譯出適合你設備使用的系統,你就可以選擇方法一;或者你編譯的系統不需要刷機,而是作為虛擬機運行,則也可以使用方法一;否則,作為新手,還是老老實實選方法二吧。
回到正題,還是先看AOSP官方教程——下載源碼,不過建議先反復看幾次中科大的AOSP鏡像中的說明,以及我上面寫的說明。
根據教程一步一步來就行了。不過如果方法二同步的過程中中斷了,建議完全刪除重新建倉庫,不然可能出現一些問題,我就遇到過這個坑。
編譯AOSP
仍然是根據教程走,AOSP官方教程——編譯,這里就需要用到上一步中你選擇的分支了,如果你是使用master分支,則可以跳過這一步:
在 谷歌親兒子們的驅動中找到你選的分支號和設備號,下載好驅動文件,將驅動文件加壓到AOSP的根目錄下,然后執行,按提示輸入“I ACCEPT”完成安裝。
其他步驟仍然按照AOSP官方教程——編譯進行。
其中選擇編譯目標的時候要跟你下載的驅動相對應(使用master分支的也要跟編譯的設備對應)。
編譯的時候容易出現GC錯誤:
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
詳細的錯誤日志里邊列出了問題并且已經給出了解決方案 - 增加Java虛擬機的-Xmx大小,即設置一個較大的堆內存上限。
可以修改Jack的配置文件prebuilts/sdk/tools/jack-admin。
這時一個管理Jack的shell腳本,找到start-server函數,直接修改其啟動參數,由原來的
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
更改為
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
此時Jack服務器仍然在后臺執行,所以我們需要將其停止,然后重啟啟動(make會自動啟動Jack服務器)才能使得修改后的參數生效。
我們執行下面的命令
$ ./prebuilts/sdk/tools/jack-admin stop-server
然后我們重新執行make -jN命令(N是你前邊設置的并行任務數量)開始編譯。
刷機
編譯完成以后,插上手機,進入手機刷機模式,直接輸入命令刷機
fastboot flashall -w