Last edited 3 years ago

How to build STM32MPU distribution for Android

This article explains how to build the STM32MPU distribution for Android™. It is intended for Distribution Package users.

1. Prerequisites[edit source]

The environment must be installed using the Distribution Package adapted to your microprocessor device (see the list of Android Distribution Package).

In addition follow the PC prerequisites dedicated to Android to make sure all the packages required to use the environment are present.

2. Build[edit source]

First execute the following command:

 source ./build/envsetup.sh

It sets several required environment variables for the build and adds several useful scripts in your path. It is mandatory to start with this command as soon as you are using a new terminal.

Use the command below to list some interested aliases created by envsetup.sh:

 hmm 


If this is the first time you set up an environment to build Android, continue to read this article. Otherwise directly go to Choosing a build target.

2.1. Chip selection[edit source]

The distribution is built for a default chip version (ex: STM32MP157F for STM32MP1 Series).

It's possible to change the selection, modifying the SOC_VERSION value in device/stm/<STM32Series>/<BoardId>/aosp_<BoardId>.mk file.

2.2. Memory selection[edit source]

The distribution is built for a default memory type (ex: microSD card 8GiB for STM32MP1 Series).

The memory size and type can be changed. More information refer to How to customize the STM32MPU distribution for Android.

Edit the device/stm/<STM32Series>/layout/android_layout.config file.

Locate the two lines below:

PART_MEMORY_TYPE
PART_MEMORY_SIZE

Current options are :

  • PART_MEMORY_TYPE sd and PART_MEMORY_SIZE 8GiB
  • PART_MEMORY_TYPE sd and PART_MEMORY_SIZE 4GiB
  • PART_MEMORY_TYPE emmc and PART_MEMORY_SIZE 4GiB

When the file has been modified, relaunch the previous command:

 source ./build/envsetup.sh

2.3. Setup[edit source]

Execute this <STM32Series> setup only once, for example for STM32MP1 Series:

 stm32mp1setup

It applies specific patches related to your <STM32Series> to customize Android and load the necessary libraries and modules.

2.4. Choosing a build target[edit source]

To choose your target device, execute the command below:

 lunch aosp_<BoardId>-<build_type>

The available build_type values are the following:

  • user: to generate an end-user production image;
  • userdebug: similar to an user build but with root access and debug capabilities;
  • eng: development configuration with additional debugging tools.

2.5. Generating the image[edit source]

Warning white.png Warning

In case you selected user build, it's required to rebuild the kernel as the prebuilt images are not compatible (see How to build kernel for Android)

You are now ready to build. To do this, just launch the command:

 make -j

Depending on your computer settings, several hours might be required to execute this command on the first build.

The result can be found in the out folder. The generated partition images are located in out/target/product/<BoardId>.

To flash images, refer to Flashing the built image.

2.6. Tips[edit source]

If you encountered the following error during the build:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

It's possible to increase the maximum heap space, executing the following command (can be added in your ~/.bashrc file):

 export JAVA_TOOL_OPTIONS="-Xmx4g"