最近一直在看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源码,然后在模拟器中查看效果。