Build Android

Follow the instructions on this page to build Android.

Set up your build environment

From within your working directory, source the script to set up your build environment:

source build/

This script imports several commands that let you work with the Android source code, including the commands used on this page. To view the source of the script, refer to platform/build/ To view the built-in help, type hmm.

Choose a target

Before building Android, you must identify a target to build. To identify your target to build, use the lunch command followed by a target that identifies your target product and build:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

View the current target

To see the current lunch settings, run:


The string representing the target has the following format:

lunch product_name-release-build_variant

The components of this string are:

  • The product_name is the name of the product you want to build, such asaosp_cf_x86_64_phone or aosp_husky. Your specific product_name can follow your own format, but the format that Google uses has these components:

    • aosp refers to the Android Open Source Platform.
    • (optional) cf is included when the target is intended to be run within the Cuttlefish emulator.
    • architecture and hardware, such as x86_64_phone or husky (Pixel 8 pro).
  • The release is set to trunk-staging.

  • The build_variant portion of the string can be one of the three values in the following table:

    build_variant Description
    user This build variant provides limited security access and is suited for production.
    userdebug This build variant helps the device developers understand the performance and power of in-development releases. When developing with a userdebug build, follow the Guidelines for userdebug.
    eng This build variant has faster build time and is best suited for day-to-day development if you don't care about performance and power.

Build the code

Run the following command to build your target. Depending on the specification of your workstation, the first build could take less than an hour and up to a few hours. Subsequent builds take significantly less time.

$ m

The first output you should see is a synopsis of your target and build environment:


The m command builds from the top of the tree, so you can run m from within subdirectories. If you have the TOP environment variable set, the m command uses it. If TOP isn't set, the m command looks up the tree from the current directory, trying to find the top of the tree.

The m command can handle parallel tasks with a -jN argument. If you don't provide a -j argument, the build system automatically selects a parallel task count that it thinks is optimal for your system.

You can build specific modules instead of the full device image by listing module names in your m command line. In addition, the m command provides some pseudo targets, called goals. For example, m nothing doesn't build anything, but parses and validates the build structure. For a list of valid goals, type m help.

Troubleshoot build errors (8.0 or earlier)

If you're building AOSP 8 or earlier, m might abort when it encounters an issue with your version of Java. For example, you might get this message:

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

Here are the likely causes and solutions:

  • You failed to install the correct JDK as specified in the JDK sections of Set Up for AOSP development (2.3 - 8.0) .
  • There's another previously installed JDK appearing in your path. Prepend the correct JDK to the beginning of your path or remove the problematic JDK.