The following instructions to build the Android source tree apply to allbranches, including ​​master​​. The basic sequence of build commandsis as follows:

Note: If you're building Android 6.0 or later,please see ​​Compiling with Jack​​ for information on thisnew default toolchain.

Set up environment


Initialize the environment with the ​​envsetup.sh​​​ script. Notethat replacing ​​​source​​​ with ​​.​​ (a single dot) saves a few characters,and the short form is more commonly used in documentation.

$ source build/envsetup.sh

or

$ . build/envsetup.sh

Choose a Target


Choose which target to build with ​​lunch​​. The exact configuration can be passed asan argument. For example, the following command:

$ lunch aosp_arm-eng

refers to a complete build for the emulator, with all debugging enabled.

If run with no arguments ​​lunch​​ will prompt you to choose a target from the menu.

All build targets take the form ​​BUILD-BUILDTYPE​​​, where the ​​ BUILD​​ is a codenamereferring to the particular feature combination.

The BUILDTYPE is one of the following:

Buildtype

Use

user

limited access; suited for production

userdebug

like "user" but with root access and debuggability; preferred for debugging

eng

development configuration with additional debugging tools

For more information about building for and running on actual hardware, see​​Running Builds​​.

Build the code


Build everything with ​​make​​​. GNU make can handle paralleltasks with a ​​​-jN​​​ argument, and it's common to use a number oftasks N that's between 1 and 2 times the number of hardwarethreads on the computer being used for the build. For example, on adual-E5520 machine (2 CPUs, 4 cores per CPU, 2 threads per core),the fastest builds are made with commands between ​​​make -j16​​​ and​​make -j32​​.

$ make -j4

Run It!


You can either run your build on an emulator or flash it on a device. Please note that you have already selected your build target with ​​lunch​​, and it is unlikely at best to run on a different target than it was built for.

Flash a Device

To flash a device, you will need to use ​​fastboot​​, which should be included in your path after a successful build. Place the device in fastboot mode either manually by holding the appropriate key combination at boot, or from the shell with

$ adb reboot bootloader

Once the device is in fastboot mode, run

$ fastboot flashall -w

The ​​-w​​​ option wipes the ​​/data​​ partition on the device; this is useful for your first time flashing a particular device but is otherwise unnecessary.

For more information about building for and running on actual hardware, see​​Running Builds​​.

Emulate an Android Device

The emulator is added to your path automatically by the build process. To run the emulator, type

$ emulator

Using ccache


ccache is a compiler cache for C and C++ that can help make builds faster.In the root of the source tree, do the following:

$ export USE_CCACHE=1
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G

The suggested cache size is 50-100G.

On Linux, you can watch ccache being used by doing the following:

$ watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

On Mac OS, you should replace ​​linux-x86​​​ with ​​darwin-x86​​.

When using Ice Cream Sandwich (4.0.x) or older, you should replace​​prebuilts/misc​​​ with ​​​prebuilt​​.

Troubleshooting Common Build Errors


Wrong Java Version

If you are attempting to build a version of Android inconsistent with yourversion of Java, ​​make​​ will abort with a message such as

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
https://source.android.com/source/download.html
************************************************************

This may be caused by:

  • Failing to install the correct JDK as specified in ​​ JDK Requirements​​.
  • Another JDK previously installed appearing in your path. Prepend the correct JDK to the beginning of your PATH or remove the problematic JDK.

Python Version 3

Repo is built on particular functionality from Python 2.x and is unfortunately incompatible with Python 3. In order to use repo, please install Python 2.x:

$ apt-get install python

Case Insensitive Filesystem

If you are building on an HFS filesystem on Mac OS, you may encounter an error such as

************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************

Please follow the instructions in ​​ Initializing the Build Environment​​ for creating a case-sensitive disk image.

No USB Permission

On most Linux systems, unprivileged users cannot access USB ports by default. If you see a permission denied error, follow the instructions​​Initializing the Build Environment​​ for configuring USB access.

If adb was already running and cannot connect to the device aftergetting those rules set up, it can be killed with ​​adb kill-server​​.That will cause adb to restart with the new configuration.