# Build an Android chat application with ONNX Runtime API

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/)
- [Create a development environment](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/1-dev-env-setup/)
- [Build ONNX Runtime](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/2-build-onnxruntime/)
- [Build ONNX Runtime Generate() API](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api/)
- [Run a benchmark on an Android phone](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android/)
- [Build and run an Android chat app](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/5-build-android-chat-app/)
- [Next Steps](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/_next-steps/)

## About this Learning Path

|  |  |
| --- | --- |
| Skill level: | Advanced |
| Reading time: | 1 hr |
| Last updated: | 05 Aug 2026 |

|  |  |
| --- | --- |
| Author: | Koki Mitsunami , Arm<br>[LinkedIn](https://linkedin.com/in/kmitsunami) |
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags: | [ML](https://learn.arm.com/tag/ml) [Windows](https://learn.arm.com/tag/windows) [Android](https://learn.arm.com/tag/android) [Kotlin](https://learn.arm.com/tag/kotlin) [CPP](https://learn.arm.com/tag/cpp) [ONNX Runtime](https://learn.arm.com/tag/onnx-runtime) [Android](https://learn.arm.com/tag/android) [Hugging Face](https://learn.arm.com/tag/hugging-face) |

### Who is this for?
This is an advanced topic for software developers interested in learning how to build an Android chat app with ONNX Runtime and ONNX Runtime Generate() API.

### What will you learn?
After completing this Learning Path, you'll be able to perform the following tasks:
- Build ONNX Runtime and ONNX Runtime generate() API for Android.
- Run a Phi-3 model using ONNX Runtime on an Arm-based smartphone.

### Prerequisites
Before starting, you'll need the following prerequisites:
- A Windows x86_64 development machine with at least 16GB of RAM.
- An Android phone with at least 8GB of RAM. This learning path was tested on Samsung Galaxy S24.

### Summary
You’ll build ONNX Runtime and its `generate()` API for Android on a Windows host, then deploy a Phi-3 model to an Arm-based smartphone. First, you’ll configure the Android NDK, cross-compile the runtime and text-generation components, and build a C model runner with CMake and Ninja. Then, you’ll launch the Android demo app in Android Studio to validate on-device inference.

### Frequently asked questions

**How do I point CMake to the correct Android NDK for these builds?**

Use the `CMAKE_TOOLCHAIN_FILE` option with the `android.toolchain.cmake` path from the installed NDK. Ensure the path and version match the NDK you installed.

**Which header files do I need to copy before configuring the C model runner?**

Copy `src\ort_genai.h` and `src\ort_genai_c.h` into `examples\c\include`. If these headers are missing, the model runner configuration will fail with include errors.

**How do I know ONNX Runtime and the generate() API built successfully?**

The build is successful when the configure and build stages complete without errors and produce Android-targeted binaries and headers. You should then be able to configure and build the `examples\c` model runner without missing include or link errors.

**What result should I expect when I run the Phi-3-mini benchmark on my phone?**

The run executes on the Android device and prints performance metrics. Proceed when the metrics appear and the process exits cleanly without runtime errors.

**Which commit of the demo app repository should I check out in Android Studio?**

Check out commit `7a635daae48450ff142e5c0848a564b245f04112`. You might be able to use a later commit, but the Learning Path was tested with that specific commit.
