首页 > 代码库 > android 源码编译及其运行模拟器相关问题记录

android 源码编译及其运行模拟器相关问题记录

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