参考文章:
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': 没有那个文件或目录
out/target/common/docs/gen’: 没有那个文件或目录
find:
find:frameworks/base/frameworks/base/docs/html': 没有那个文件或目录
out/target/common/docs/gen’: 没有那个文件或目录
find:
find:frameworks/base/frameworks/base/docs/html': 没有那个文件或目录
out/target/common/docs/gen’: 没有那个文件或目录
find:
find:frameworks/base/frameworks/base/docs/html': 没有那个文件或目录
out/target/common/docs/gen’: 没有那个文件或目录
find:
find:frameworks/base/frameworks/base/docs/html': 没有那个文件或目录
out/target/common/docs/gen’: 没有那个文件或目录
find:
这些也不用管,接着编译,编译过程中会出现许多的问题,大部分问题都是缺少对应的依赖库导致,百度的话均能找到解决方案。但是我编译的时候出现了这么个问题
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的不同
附上我的分享链接(Android2.3.5以及linux kernel内核)http://pan.baidu.com/s/1pJDUoJ5