Skip to main content
A phone or an Android-based robot controller can run a Cerulion graph, record it, and serve its topics to your desk. There is no prebuilt Android download: you build the CLI and your nodes from a source checkout on a Linux or macOS host and copy them to the device, or link Cerulion into an app. There are two routes:

Toolchain

The supported targets are arm64-v8a and x86_64, with Android API 30 or newer, NDK 27.2 and cargo-ndk 4.1.2. Build on a host, never on the device:
Use -t x86_64 for an x86_64 device.

Run the CLI on a device

Build the CLI and the network daemon

From the source checkout, on the host:

Build your node workspace

Node libraries are built on the host too, with any Rust 1.95 or newer: it does not have to be the compiler that built the CLI, but both builds need Android support. From your workspace:
cargo-ndk puts the libraries under target/<target-triple>/<profile>, and the CLI looks there first. Keep that directory when you copy the workspace to the device; do not flatten its libraries into target/<profile>. A workspace made by cerulion workspace create already carries the iceoryx2 patch block Android needs.

Set up the shell on the device

In an adb shell, give the CLI writable home and temporary directories:
Run cerulion login once in that shell. Then run your graph as on any other machine.
On Android the network gateway refuses every LAN peer unless CERULION_LAN_ACCESS=open is set in the shell that starts it. To read the device’s topics from a desk over USB, forward the port with adb forward tcp:7683 tcp:7683, have the device listen on tcp/0.0.0.0:7683, and connect the desk CLI to tcp/127.0.0.1:7683.

Embed a graph in an app

cerulion_android gives an app a Java facade, backed by JNI, over an embedded runtime that runs the graph, the gateway and the recorder in the app’s process. The app loads one native library: its own runtime crate, which links cerulion_android and the app’s graph nodes. Nodes are linked into that library, not loaded from separate files. The sample app in the repository, crates/cerulion_android/android, is a complete example: it links the timer and printer nodes of examples/basic_timer, and ships its graph in the APK. Its build steps are in the Android guide in the repository.

What works on Android

cerulion topic list run on the device cannot see an app’s topics; read them from a host through the app’s gateway. An emulator does not pass multicast to the host, so test mDNS discovery from a physical device.

Next steps

Installation

Set up the host you build from.

Network a graph

Reach the device’s topics from your desk.