最近一直在看android源碼相關的文檔,包括編譯源碼,還有framework層的代碼,本人很懶,一直沒有寫博客,今天想自己在編譯一下源碼,並且運行在模擬器中。
源碼的版本不同,需要的jdk可能也有所不同,一切都參照官方給與的文檔,下載源碼的方法也參考官方文檔。
注意點:1.環境變量要設置正確,不要出現錯誤
2.基本沒有一次就能順利編譯源碼的,多少都會出錯,根據提示修改錯誤,安裝一些包和庫就可以搞定,具體問題具體查找,我遇到的問題也可多了,都是按官方文檔解決的。有些問題可能和你的編譯環境相關,這里不一一介紹了。
這里把我的環境變量設置一口氣發出來:
執行命令 gedit ~/.bashrc 打開配置文件后,加入以下內容
export ANDROID_HOME=/home/cai/candy/develop/adt-bundle-linux-x86_64-20131030/sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
作為參考就可以,我編譯的源碼是4.3,如果你編譯最新的4.4估計需要jdk是版本為7。
下載源碼后,編譯源碼,仍然按照官方文檔,執行
source build/envsetup.sh
lunch
出現一些需要選擇的項目
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_x86-eng
3. aosp_mips-eng
4. vbox_x86-eng
5. aosp_flo-userdebug
6. full_grouper-userdebug
7. full_tilapia-userdebug
8. mini_armv7a_neon-userdebug
9. mini_mips-userdebug
10. mini_x86-userdebug
11. full_mako-userdebug
12. full_maguro-userdebug
13. full_manta-userdebug
14. full_arndale-userdebug
15. full_toroplus-userdebug
16. full_toro-userdebug
17. full_panda-userdebug
我這里選擇的1,aosp_arm-eng
我主要是在模擬器中完成,所以aosp就可以了。
最后make -j4
編譯出錯大致都是和少一些庫有關,根據提示安裝相關的庫就可以。
編譯完成后,我們就可以使用android模擬器emulator運行編譯出來的源碼,編譯完成會生成相應的system.img,userdata.img,ramdisk.img都在~/android4.3/out/target/product/generic下面可以看到,因此我們需要添加環境變量
export ANDROID_PRODUCT_OUT=~/android4.3/out/target/product/generic
export ANDROID_PRODUCT_OUT_BIN=~/android4.3/out/host/linux-x86/bin
export PATH=$PATH:$ANDROID_PRODUCT_OUT_BIN:$ANDROID_PRODUCT_OUT
最后只要執行emulator就可以啟動模擬器了
但是,重新啟動一個命令終端,執行emulator就會出現以下錯誤
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
不知道大家遇到過沒,於是我查了一些資料,發現在環境變量里添加以下源碼路徑就好了
export ANDROID_BUILD_TOP=~/android4.3
可能是和版本有關系,目前解決方法設置ANDROID_BUILD_TOP環境變量
emulatro -skin WSVGA
之后就可以修改framework源碼,然后在模擬器中查看效果。