android源码编译与开发:问题记录

       最近在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)和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);
  }

难道java不支持模板特化?所以我将模板去掉或者把下面的特化屏蔽,编译通过
 
  

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
解决办法:缺少libc开发包,安装即可: apt-get install libc6-dev-i386

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导致的,可以到sun.com下载jdk后安装,建议安装到/usr/lib /jvm目录下,

例如我下载的安装文件为 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 error: GLES2/gl2.h: No such file or director

主要是NDK默认的Android版本还不支持GLES2导致的,所以要在Application.mk文件中指定Android的版本,比如使用9:        APP_PLATFORM := android-9    然后再编译就OK了。

 
  
 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(android开发)