<br />

Please follow instructions below to build Android example apps with MediaPipe Framework.
To learn more about these example apps, start from [Hello World! on
Android](https://developers.google.com/edge/mediapipe/framework/getting_started/hello_world_android).

## Building Android example apps with Bazel

Set up your local toolchain and compile MediaPipe Android APKs from the command
line with Bazel.

### Prerequisite

- Install MediaPipe Framework following these [instructions](https://developers.google.com/edge/mediapipe/framework/getting_started/install.md.txt).
- Setup Java Runtime.
- Setup Android SDK release 35.0.0 or later.
- Setup Android NDK version 28 or later.

MediaPipe recommends setting up Android SDK and NDK via Android Studio (and see
below for Android Studio setup). However, if you prefer using MediaPipe without
Android Studio, please run
[`setup_android_sdk_and_ndk.sh`](https://github.com/google/mediapipe/blob/master/setup_android_sdk_and_ndk.sh)
to download and setup Android SDK and NDK before building any Android example
apps.

If Android SDK and NDK are already installed (e.g., by Android Studio), set
`$ANDROID_HOME` and `$ANDROID_NDK_HOME` to point to the installed SDK and NDK.

```bash
export ANDROID_HOME=<path to the Android SDK>
export ANDROID_NDK_HOME=<path to the Android NDK>
```

and add `android_ndk_repository()`, `android_sdk_repository()` and `bind()`
rules into the
[`WORKSPACE`](https://github.com/google/mediapipe/blob/master/WORKSPACE) file as
the following:

```bash
$ echo "android_sdk_repository(name = \"androidsdk\")" >> WORKSPACE
$ echo "android_ndk_repository(name = \"androidndk\", api_level=26)" >> WORKSPACE
$ echo "bind(name = \"android/crosstool\", actual = \"@androidndk//:toolchain\")" >> WORKSPACE
```

In order to use Framework on earlier Android versions, MediaPipe needs to switch
to a lower Android API level. You can achieve this by specifying `api_level =
$YOUR_INTENDED_API_LEVEL` in android_ndk_repository() and/or
android_sdk_repository() in the
[`WORKSPACE`](https://github.com/google/mediapipe/blob/master/WORKSPACE) file.

> [!TIP]
> **Tip:** You can run this [script](https://github.com/google/mediapipe/blob/master/build_android_examples.sh) to build (and install) all MediaPipe Android example apps.

1. To build an Android example app, build against the corresponding
   `android_binary` build target. For instance, for MediaPipe Hands the target
   is `handtrackinggpu` in the
   [BUILD](https://github.com/google/mediapipe/tree/master/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/BUILD)
   file:

   > [!NOTE]
   > **Note:** To reduce the binary size, consider appending `--linkopt="-s"` to the command below to strip symbols.

   ```bash
   bazel build -c opt --config=android_arm64 \
   mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu
   ```
2. Install it on a device with:

   ```bash
   adb install \
   bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.apk
   ```