最近在ubuntu12.04 x86环境上编译android4.0系统,和以前在10.10上编译遇到的问题完全不一样,网上也查不到知识,所以把自己解决问题的心得记录如下:
1. 目标发行版 1.5 与默认的源发行版 1.7 冲突。因为我装的jdk是1.7版本的,在了解了build下面的编译规则后,去这个目录下查找使用了jdk1.5规则的mk。
执行一下命令:
grep -R 1.5 *
输出中找到:combo/javac.mk 把所有的用到 -target 1.5 中的1.5改成1.7
注意:在我编译几个小时候还是出错了,居然是bad class file错误,原因还是因为有些库是1.5的没有重新编译,1.7的库using的时候不兼容
最后下了个1.6的终于可以编译了。
2. libcore/luni/src/main/java/java/lang/Enum.java:147: 错误: ordinal可以在Enum中访问private
return return ordinal - o.ordinal;
看到是个访问私有成员语法错误,我将其改了 return return ordinal - o.ordinal();
3. external/android-mock/src/com/google/android/testing/mocking/AndroidMock.java:2449 错误: 名称冲突: capture(Capture
解决方法,我打开这个文件这个位置,看到java还有模板编程的:
public static T capture(Capture captured) {
return EasyMock.capture(captured);
}
public static long capture(Capture captured) {
return EasyMock.capture(captured);
}
public static int capture(Capture captured) {
return EasyMock.capture(captured);
}
4.编译时出现 /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory
PLATFORM_VERSION_CODENAME=AOSPPLATFORM_VERSION=AOSPTARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=TARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_ARCH_VARIANT=armv5teHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=OPENMASTER============================================host C: acp <= build/tools/acp/acp.cIn file included from /usr/include/features.h:387,from /usr/include/stdlib.h:25,from build/tools/acp/acp.c:11:/usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directorycompilation terminated.make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1
5. 太不容易了,终于看到自己编译的Android了可能是我使用的机器比较慢,虚拟机运行的有些慢啊。。。。太不容易了,终于看到自己编译的Android了 - - 下一步开始研究这个系统怎样去定制了....编译Android,遇到Your version is: /bin/bash: java: command not found.错误的解决
Your version is: /bin/bash: java: command not found.============================================ PLATFORM_VERSION_CODENAME=AOSP PLATFORM_VERSION=AOSP TARGET_PRODUCT=generic TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=OPENMASTER ============================================ /bin/bash: bison: command not found Checking build tools versions... ************************************************************ You are attempting to build with the incorrect version of java. Your version is: /bin/bash: java: command not found. The correct version is: 1.6. Please follow the machine setup instructions at http://source.android.com/source/download.html ************************************************************ build/core/main.mk:114: *** stop. Stop.
例如我下载的安装文件为 jdk-6u21-linux-i586.bin,安装完后生成一个jdk1.6.0_21的目录,
然后使用ln -s jdk1.6.0_21 java-6-sun命令做一个链接,这样以后再升级sun jdk时只需要改动一下链接就可以了。
6. make sdk的时候出现 :build/core/main.mk:608: *** Module 'libvideoeditor_core' in PRODUCT_PACKAGES has nothing to install!
这说明没有这个对应的产品包,那么在下面两个文件去掉其define
./build/target/product/generic_no_telephony.mk
./build/target/product/large_emu_hw.mk
搜索到对应的名字注释掉把
7. make sdk之前记得敲入命令 lunch sdk-eng 不然后面会出现con't load local source file
8.
主要是NDK默认的Android版本还不支持GLES2导致的,所以要在Application.mk文件中指定Android的版本,比如使用9: APP_PLATFORM := android-9 然后再编译就OK了。