Developer Quick-Start Guide (Android & iOS)
Use this guide to build the Secluso mobile application from source.
Important: Complete all core setup steps inHOW_TO.mdbefore continuing.
- Flutter Docs: flutter.dev
- Firebase Setup for Flutter: firebase.google.com/docs/flutter/setup
Make sure the following tools are installed:
| Tool | Purpose |
|---|---|
| Flutter SDK (3.x or later) | Cross-platform mobile framework |
| Rust + rustup | Native library support |
| Android NDK | Compile Rust code for Android |
| Visual Studio Code | Recommended IDE |
| Firebase Account | Required for push notifications |
You can verify setup with flutter doctor.
git clone https://github.com/secluso/secluso.git
cd secluso
- Launch Visual Studio Code
- Open the secluso/ folder
- Install any recommended extensions (Flutter, Rust, Dart)
flutter pub get
From the project root:
cd rust
Add Android build targets:
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
Build and export to the Android JNI directory:
cargo ndk -o ../android/app/src/main/jniLibs build
This will generate .so files for each architecture and place them in the appropriate folder.
- Plug in your Android device via USB
- Enable Developer Mode and USB Debugging
- Ensure the device is recognized in Visual Studio Code (bottom-right status bar)
- From the project root, run:
flutter run
This will build and launch the app on your connected device.
| Problem | Solution |
|---|---|
App doesn’t update after flutter run |
Run flutter clean first |
| Rust compilation errors | Ensure targets and NDK are properly set |
The Android project includes a containerized reproducible-build path under tool/repro.
To compare an official Secluso Android release installed on a phone against a local rebuild:
tool/repro/build_with_docker.sh
tool/repro/pull_device_apk.sh
python3 tool/repro/apkdiff.py \
build/reproducible/device.apk \
build/reproducible/app-release-unsigned.apkFor the full reproducible-build workflow, signed-release path, and internal reproducibility test (tool/repro/check_reproducibility.sh), see tool/repro/README.md.
The app supports a special Android build mode for F-Droid that forces UnifiedPush and excludes Firebase from the Android dependency graph.
Build it with:
tool/fdroid/build_fdroid_apk.shWhat this does:
- Forces Android push transport to UnifiedPush
- Excludes the Android
firebase_coreandfirebase_messagingplugin projects - Excludes the direct native
com.google.firebase:firebase-messagingdependency - Generates an F-Droid-specific
GeneratedPluginRegistrantwithout Firebase orintegration_test
Important note:
- The Dart packages
firebase_coreandfirebase_messagingstill remain inpubspec.yamlfor normal App Store / Play builds. - That does not break the F-Droid build by itself. Flutter/Dart imports are resolved at the Dart package level, while Android plugin registration is a separate native step.
- In the F-Droid build, the Firebase Android plugins are not registered, and the Android push flow is routed through UnifiedPush instead of FCM.
- Because the F-Droid runtime avoids the FCM code paths, the remaining Dart imports do not trigger Firebase runtime errors on Android.
Verification commands:
SECLUSO_FDROID_BUILD=1 ./android/gradlew -p android app:properties --console=plain
SECLUSO_FDROID_BUILD=1 ./android/gradlew -p android app:dependencies --configuration debugRuntimeClasspath --console=plainOn the F-Droid build, the runtime classpath should include project :unifiedpush_android and should not include firebase_core, firebase_messaging, or com.google.firebase:*.
Submission prep files for Fdroid are available here:
- fastlane/metadata/android/en-US/
- fdroid/com.secluso.mobile.yml
Need help or want to contribute? Visit the Secluso GitHub Repository.