第一次編譯AOSP簡單流程

轉載注明出處:簡書-十個雨點

本文只記錄如何跑通、編譯AOSP,以及我自己遇到的坑,不討論復雜問題,因為我也不會。

首先只要準備以下三樣東西:

  1. 中科大的AOSP鏡像

  2. AOSP官方教程——準備

  3. 不急不躁慢慢來的自己!!!

按部就班的配置環境

根據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工具的錯誤,也同樣用這種方式解決就好了。

下載源碼

先說明兩點:

  1. 使用中科大鏡像的方法一,得到的是master分支的最新代碼
  2. 使用中科大鏡像的方法二,可以選擇自己想要的分支進行同步

有什么區別呢?

谷歌親兒子們的驅動

AOSP倉庫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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容