# 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 [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), [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?
Upon completion of this Learning Path, you will be able to:
- 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 will need the following:
- 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.
