Android client for Dark Matter.
The app is a Kotlin/Jetpack Compose Android app backed by the Dark Matter Marmot bindings. Dark Matter owns protocol data and stores it in SQLite. The Android app should render that data, manage Android platform behavior, and keep UI lifecycle state.
The Android app should not become a second database for Dark Matter data. If a screen is slow because a query or projection is expensive, prefer improving the Dark Matter API or SQLite-backed projection over adding an Android cache.
just test
just debug
just install-debug
just apk
just release-fastDirect Gradle equivalents:
./gradlew :app:testDebugUnitTest
./gradlew :app:assembleDebug
./gradlew :app:installDebugRelease builds use signing values from local.properties or the matching environment variables:
DARKMATTER_KEYSTORE_PATHDARKMATTER_KEYSTORE_PASSWORDDARKMATTER_KEY_ALIASDARKMATTER_KEY_PASSWORD
Telemetry and audit-log upload runtime configuration is also read from
local.properties or environment variables so endpoints and tokens stay out of
Git:
DARKMATTER_OTLP_ENDPOINTDARKMATTER_OTLP_AUTH_TOKENDARKMATTER_AUDIT_LOG_ENDPOINTDARKMATTER_AUDIT_LOG_AUTH_TOKENOTLP_TOKEN_DARKMATTER_ANDROID(fallback auth token for both telemetry and audit logs)DARKMATTER_DEPLOYMENT_ENVIRONMENT(defaults toandroid-release)
Use:
just apkThis builds the signed arm64-v8a release APK only, using the checked-in Marmot
bindings and native libraries. The output filename is
darkmatter-v8a-release-YYYY-MM-DD.apk. The release folder is printed as the
final line for Finder.
Use:
just releaseUse just release-fast when the checked-in Marmot bindings and native libraries are already current.
For local device checks, prefer:
just install-debugAvoid connectedDebugAndroidTest on Jeff's Pixel unless he asks for it, because it can uninstall the app and wipe local state.
Keep Compose work cheap. Do not call slow binding, database, or network paths from composition or from the main thread.
Use Dark Matter streams and SQLite-backed projections as the fast path. If Android needs a shape that is expensive to assemble, add or improve the Dark Matter projection rather than storing a duplicate copy in the Android app.
Close native subscriptions when screens or services stop using them.