I ran into a few errors when I tried to compile Android on my Ubuntu 12.04 64-bit laptop. Here are my notes on fixing them and compiling successfully:

Wrong Java Version

I have the Java 6 OpenJDK, version 1.6.0_24. This meets the android Java requirement for 1.6.0, but I found (later in the build process) that Android really needs to be built by Sun’s Java SDK. In the meantime, the _24 suffix doesn’t check out in Android’s makefile, which produces the errorYou are attempting to build with the incorrect version of javabefore exiting:

1 2 3 4 5 6 7 8 9 10 11 12 Checking build tools versions... ************************************************************ You are attempting to build with the incorrect version of java. Your version is: java version "1.6.0_24". The correct version is: Java SE 1.6. Please follow the machine setup instructions at http://source.android.com/source/download.html ************************************************************ build/core/main.mk:131: *** stop.Stop.

Commenting out the $(error stop) statement from build/core/main.mk on line 131 will allow compilation to proceed:

131 132 # $(error stop) endif

make will display the error message, but continue compiling.However, compiling with OpenJDK will probably create problems later in the build process(inout/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar). To fix the problems, Sun’s Java SDK will need to be installed.

Installing the Sun Java 6 JDK in Ubuntu 12.04

To fix themake: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar] Error 41, get the most recent Sun JDK fromhere. Once you’ve downloaded it, install it and run update-alternatives so your system uses the Sun JDK:

1 2 3 4 5 6 7 8 9 10 11 $ chmod +x jdk-6u33-linux-x64.bin $ sudo ./jdk-6u33-linux-x64.bin $ sudo mv jdk1.6.0_32 /usr/lib/jvm/ $sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_33/bin/java 1 $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_33/bin/javac 1 $ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_33/bin/javaws 1 $ sudo update-alternatives --config java $ sudo update-alternatives --config javac $ sudo update-alternatives --config javaws

To verify that the installation was successful, check Java’s version. It should now show that the Sun JDK is running instead of IcedTea:

1 2 3 4 $ java -version java version "1.6.0_33" Java(TM) SE Runtime Environment (build 1.6.0_33-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)

To revert the changes after Android has been compiled, run update-alternatives to switch back to OpenJDK.

error: “_FORTIFY_SOURCE” redefined [-Werror]

This is a well-known error caused by the redefinition of _FORTIFY_SOURCE inbuild/core/combo/HOST_linux-x86.mk. It doesn’t happen on all systems. In fact, the error didn’t appear for most people in Ubuntu 11.04, but it started showing up after 11.10.

The error can be fixed by changing the HOST_GLOBAL_CFLAGS on line 56 from

1 HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

to

1 HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

Undefining and redefining the _FORTIFY_SOURCE macro somehow fixes the issue. The “_FORTIFY_SOURCE redefined” error was initially discovered by aCyanogenMod developer.

external/mesa3d/src/glsl/linker.cpp:1394:49: error: expected primary-expression before ‘,’ token

I was compiling Android with gcc/g++ 4.6. This error can be solved by downgrading to gcc/g++4.4

1 2 3 4 5 6 7 $ sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib $ sudo unlink /usr/bin/gcc $ sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc $ sudo unlink /usr/bin/g++ $ sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++

To reverse the changes when you’re done with them, reverse the instructions:

1 2 3 4 5 $ sudo unlink /usr/bin/gcc $ sudo ln -s /usr/bin/gcc-4.6 /usr/bin/gcc $ sudo unlink /usr/bin/g++ $ sudo ln -s /usr/bin/g++-4.6 /usr/bin/g++

If your system is like mine, Android should have compiled successfully. You can test the build by running theemulatorcommand, which is automatically added to your path after compilation.

The result:

The Emulator, running the finished product

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android异步消息机制之Handler
  2. Android开发:Activity初始化时屏蔽EditTex
  3. TabHost与RadioGroup结合完成的菜单【带
  4. Android中的FILL_PARENT与WRAP_CONTENT的
  5. Android bluetooth介绍(四): a2dp connect流
  6. Android之应用程序基础
  7. android 设置中划线 下划线等
  8. android 零星调试笔记
  9. Andorid Dialog 示例【慢慢更新】
  10. android 平台设置默认home后按home键弹出