1. 程式人生 > >編譯Android2.3.5原始碼,提供原始碼

編譯Android2.3.5原始碼,提供原始碼

參考文章:
1.編譯android原始碼與核心總結
2.老羅-在Ubuntu上下載、編譯和安裝android最新原始碼
現在說下我的安裝情況吧
我在Ubuntu12 64位機器安裝,使用的離線android 原始碼為參考1中提供的 Android2.3.5_Kernel.7z(後面也會附上我自己做的網盤分享連結),java jdk使用的1.6。
下載好Android2.3.5_Kernel.7z之後最好使用7z工具進行解壓縮(我之前也是用的winrar解壓),解壓的過程中可能會出現說是否替換之類的提示,選擇全部替換,解壓之後還會顯示說 cannot delete file什麼之類的,這個沒多大影響。
以下的所有操作均使用root身份進行


解壓好放入Ubuntu系統資料夾下,我的放在 /usr/local目錄下,進入android目錄,輸入 make,就開始編譯了,編譯的過程中會出現許多警告和注意之類的提示,不用管,同時編譯過程中還會出現許多比如:

find: frameworks/base/frameworks/base/docs/html': 沒有那個檔案或目錄
find:
out/target/common/docs/gen’: 沒有那個檔案或目錄
find: frameworks/base/frameworks/base/docs/html': 沒有那個檔案或目錄
find:
out/target/common/docs/gen’: 沒有那個檔案或目錄
find: frameworks/base/frameworks/base/docs/html': 沒有那個檔案或目錄
find:

out/target/common/docs/gen’: 沒有那個檔案或目錄
find: frameworks/base/frameworks/base/docs/html': 沒有那個檔案或目錄
find:
out/target/common/docs/gen’: 沒有那個檔案或目錄
find: frameworks/base/frameworks/base/docs/html': 沒有那個檔案或目錄
find:
out/target/common/docs/gen’: 沒有那個檔案或目錄

這些也不用管,接著編譯,編譯過程中會出現許多的問題,大部分問題都是缺少對應的依賴庫導致,百度的話均能找到解決方案。但是我編譯的時候出現了這麼個問題

error: expected unqualified-id before ‘.’ token

網上沒找到直接的答案,但解決方法與下面的問題類似

target Strip: AudioInRecord (out/target/product/generic/obj/EXECUTABLES/AudioInRecord_intermediates/AudioInRecord)
target thumb C++: BufferQueue_test <= system/media/opensles/tests/automated/BufferQueue_test.cpp
system/media/opensles/tests/automated/BufferQueue_test.cpp:34:29: error: SLES/OpenSLESUT.h: No such file or directory
system/media/opensles/tests/automated/BufferQueue_test.cpp: In function ‘void CheckErr(SLresult)’:
system/media/opensles/tests/automated/BufferQueue_test.cpp:55: error: ‘slesutResultToString’ was not declared in this scope
make: * [out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/BufferQueue_test.o] Error 1

解決方案是:
把android原始碼中system/media/opensles/libopensles/OpenSLESUT.h 這個檔案拷貝到system/media/opensles/include/SLES/OpenSLESUT.h ,再接著make,可參見:
OpenSLESUT.h問題
經過很長時間的等待,終於編譯好了,設定環境變數之後執行模擬器。其實整個編譯過程遇到的問題一般百度再仔細看看就能解決了
附上截圖一張(這裡我沒有編譯kernel核心,用的自帶的)
模擬器截圖

接著,我們再編譯linux kernel核心,將壓縮包(後面的分享連結裡有)解壓得到kernel資料夾,將kernel拷貝到android目錄下,進入kernel目錄,修改Makefile檔案,新增相應的環境變數,具體操作見參考1
輸入 make goldfish_defconfig
輸入 make
這時,我的提示報錯

include/asm is a directory but a symlink was expected

解決方法是刪除kernel/include 目錄下的asm資料夾,參考:
linux核心編譯錯誤
接著make,成功,以自己的linux 核心啟動模擬器如圖:
這裡寫圖片描述
注意 兩幅圖的不同之處,即 Kernel version的不同