How to Compile Android on Ubuntu (12.04)

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:

“You are attempting to build with an unsupported version of java.”

Java 7 update: I ran into this problem recently while trying to build Android/Cyanogenmod on Arch Linux.  brunch game me the following error:

To fix this, I changed line 129 from

to

and everything worked. It’s a bit of a hack, but as long as you have a usable version of Java SE, everything will work.

For Java 6 (original instructions): 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 error
You are attempting to build with the incorrect version of java
before exiting:

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

make will display the error message, but continue compiling. However, compiling with OpenJDK will probably create problems later in the build process (in out/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 the Android make error 41

get the most recent Sun JDK from here. Once you’ve downloaded it, install it and run update-alternatives so your system uses the Sun JDK (instructions below are for my 64-bit system. Your number may also be different):

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

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

Kernel source found, but no configuration was defined (Cyanogenmod)

This happened when I tried to build Cyanogenmod, a while after I successfully built Android using the AOSP code. This fix wasn’t necessary when I built an AOSP goldfish kernel setup.

To fix this, I added TARGET_KERNEL_CONFIG to the end of build/target/board/generic/BoardConfig.mk like so:

error: “_FORTIFY_SOURCE” redefined [-Werror]

This is a well-known error caused by the redefinition of _FORTIFY_SOURCE in build/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

to

Undefining and redefining the _FORTIFY_SOURCE macro somehow fixes the issue. The “_FORTIFY_SOURCE redefined” error was initially discovered by a CyanogenMod 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 systemwide, or just installing gcc/gcc++ 4.4 and specifying them while making.

Then, override make’s default variables with

or

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

The result:

Android Emulator Ubuntu 12.04

The Emulator, running the finished product

Incoming search terms:

8 thoughts on “How to Compile Android on Ubuntu (12.04)

  1. Thank you very much for the post mate. I tried to do this for ever. No other method worked thanks a lot!

    • An alternative to that is during the make process, you can do:

      source build/envsetup.sh; lunch
      CC=gcc-4.4 CXX=g++-4.4 make -j8

      this will override the default variables for make

  2. a more less intrusive way to uso gcc-4.4: compile with

    make CC=gcc-4.4 CXX=g++-4.4 -j4

  3. Pingback: U-boot, Linux Kernel, and Android Patches for Freescale i.MX6 HDMI TV Dongles