1. 程式人生 > >第一次編譯AOSP簡單流程

第一次編譯AOSP簡單流程

本文只記錄如何跑通、編譯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工具的錯誤,也同樣用這種方式解決就好了。

下載原始碼

先說明兩點:
1. 使用中科大映象的方法一,得到的是master分支的最新程式碼
2. 使用中科大映象的方法二,可以選擇自己想要的分支進行同步

有什麼區別呢?

先看看上面AOSP倉庫master分支對應的驅動,如果你手頭的裝置在裡頭,就表示master分支可以直接編譯出適合你裝置使用的系統,你就可以選擇方法一;或者你編譯的系統不需要刷機,而是作為虛擬機器執行,則也可以使用方法一;否則,作為新手,還是老老實實選方法二吧。

根據教程一步一步來就行了。不過如果方法二同步的過程中中斷了,建議完全刪除重新建倉庫,不然可能出現一些問題,我就遇到過這個坑。

編譯AOSP

仍然是根據教程走,AOSP官方教程——編譯,這裡就需要用到上一步中你選擇的分支了,如果你是使用master分支,則可以跳過這一步:

谷歌親兒子們的驅動中找到你選的分支號和裝置號,下載好驅動檔案,將驅動檔案加壓到AOSP的根目錄下,然後執行,按提示輸入“I ACCEPT”完成安裝。

其中選擇編譯目標的時候要跟你下載的驅動相對應(使用master分支的也要跟編譯的裝置對應)。

編譯的時候容易出現GC錯誤:

Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
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

轉載註明出處:十個雨點