android/ links engine/src/ and interpreter/src/ via JNI/CMake (real astronomy.c, not the watch's size-constrained substitute), rendering through Jetpack Compose with a burger-menu config page mirroring WatchConfig and a WorkManager-driven daily notification. Independent of the watch app - neither requires the other. build-image now bundles the Android SDK/NDK alongside the Pebble SDK (VERSION bumped to 2), and .gitea/workflows/build.yml/Makefile/ run-image.sh build and publish the APK the same way as the CLI tarball and .pbw.
Deck in a Dash — Android app
A standalone Android app showing the same daily tarot (Celtic Cross) +
astrology reading as the Pebble watch app (../watch/), with a burger
menu leading to a config page. Independent of the watch app - neither
requires the other to be installed. See the root
CLAUDE.md's "Android app" section for the full
architecture (JNI-linked engine/interpreter, JSON bridge schema,
WorkManager notification, card art pipeline).
Building
Requires:
- A JDK (17+; the project's own
compileOptions/toolchain target Java 17).JAVA_HOMEshould point at it, or ajavamatching that version must be first onPATH. - The Android SDK, with
ANDROID_HOME(orANDROID_SDK_ROOT) set - needs at minimumplatforms;android-36,build-tools;36.0.0,ndk;30.0.14904198, andcmake;3.22.1installed (seeapp/build.gradle.kts'scompileSdk/ndkVersionandapp/src/main/jni/CMakeLists.txt'scmake_minimum_requiredfor the exact versions this project pins -../build-image/Dockerfileinstalls the same ones for CI). ANDROID_NDK_HOMEset to that installed NDK's directory.- Python 3 + Pillow (
pip install Pillow) - needed byscripts/gen_card_images.py/gen_launcher_icon.py, which Gradle'spreBuildtask runs automatically (seeapp/build.gradle.kts).
./gradlew assembleDebug # -> app/build/outputs/apk/debug/app-debug.apk
Or, from the repo root: make android, which wraps the above and
copies the APK into dist/deck-in-a-dash-<version>.pbw's sibling,
dist/deck-in-a-dash-<version>.apk (same version resolution as make package/make watchapp - see the root Makefile).
The Gradle wrapper (./gradlew) resolves its own pinned Gradle version
on first run - no separate Gradle install is needed.
Ships the Android auto-generated debug keystore, not a release-signed
build - see the root CLAUDE.md's Android section for why.