An Android messenger application built with Kotlin and Jetpack Compose, using the libcabi_rust_libp2p native library from fidonext-core (pre-built binaries only; no Rust or native build in this repo).
- 🎨 Modern UI with Jetpack Compose
- 🔒 Message encryption using native libp2p library
- 💬 Real-time chat interface
- 📱 Material Design 3
- ⚡ High-performance message processing
- UI Layer: Jetpack Compose with Material 3
- ViewModel: MVVM architecture with StateFlow
- JNI Bridge: Native interface to libcabi_rust_libp2p (pre-built)
- Pre-built binaries from fidonext-core releases
- Downloaded at build time; JNI in
app/src/main/cpp/links against the.so
- Android Studio (latest version)
- Android SDK 24+
- Android NDK (for building the JNI wrapper; installed via SDK Manager)
- Optional: Add a relay list at
app/src/main/assets/bootstrap_nodes.txt. - Build (downloads libp2p binary from fidonext-core if needed, then builds the app):
Or with Gradle only:
./scripts/build.sh
The first build will run./gradlew assembleDebug
scripts/download_libcabi_rust_libp2p.shto fetch the pre-builtlibcabi_rust_libp2pfor arm64-v8a. - Run: e.g.
./scripts/run.shor install the APK on a device/emulator.
Note: Pre-built library is arm64-v8a only (real devices). x86/x86_64 emulators are not supported unless fidonext-core adds those binaries to releases.
- Android Studio / SDK: Install Android Studio and NDK (SDK Manager → SDK Tools → NDK).
- local.properties (optional, if not auto-detected):
sdk.dir=/path/to/Android/sdk - Build: Run
./scripts/build.shor./gradlew assembleDebug. The first run will download the native library from GitHub releases.
fidonext_android/
├── app/
│ ├── src/main/
│ │ ├── java/com/fidonext/messenger/
│ │ │ ├── MainActivity.kt # Main UI
│ │ │ ├── data/
│ │ │ │ └── Message.kt # Data models
│ │ │ ├── rust/ # Kotlin package: JNI bindings to libp2p
│ │ │ │ └── RustNative.kt
│ │ │ ├── ui/theme/ # Compose theme
│ │ │ └── viewmodel/
│ │ │ └── ChatViewModel.kt # Business logic
│ │ ├── jniLibs/ # Pre-built libcabi_rust_libp2p (downloaded)
│ │ └── AndroidManifest.xml
│ └── build.gradle.kts
├── scripts/
│ ├── build.sh # Download libp2p + Gradle build
│ └── download_libcabi_rust_libp2p.sh # Fetch binary from fidonext-core releases
└── build.gradle.kts
Pre-built binaries are downloaded from fidonext-core releases. To use a different version, set FIDONEXT_CORE_RELEASE when running the download script (e.g. FIDONEXT_CORE_RELEASE=v0.0.3 ./scripts/download_libcabi_rust_libp2p.sh).
./gradlew installDebugUse Android instrumented/unit tests as usual.
./gradlew assembleRelease- AES-GCM (already included in dependencies)
- ChaCha20-Poly1305
- Or use established protocols like Signal Protocol
MIT License
Contributions are welcome! Please feel free to submit a Pull Request.