# lumen Android client (later) Kotlin UI + MediaCodec (decode) + a thin JNI layer over the `lumen-core` C ABI. ## Wiring 1. Build the core as a shared library per Android ABI: ```sh rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android cargo build -p lumen-core --release --target aarch64-linux-android # liblumen_core.so ``` (Use `cargo-ndk` to handle the NDK toolchain/linker.) 2. JNI shim: small C/Rust glue mapping `lumen_*` to Kotlin `external fun`s, bundling `liblumen_core.so` into the APK's `jniLibs/`. 3. Kotlin: client `LumenSession` → `lumen_client_poll_frame` on a decode thread → feed `MediaCodec` → render to a `SurfaceView` aligned to the display refresh. ## Status Placeholder — scheduled after the Apple client (M5).