Files
deck_in_a_dash/android
ml 7c60af5142
build / build (push) Successful in 3m8s
Fix Android config save feedback and mirror watch reading layout
Gray out Save until settings are dirty, add a Cancel button that
discards edits, reorder ReadingScreen to match the watch's
build_content() (adds the missing Attitude/Outcome preview and the
day-significance rank/count), and fix UI chrome to follow the app's
own language setting instead of system locale (values-de/strings.xml
+ appStringResource()/localizedContext()).
2026-07-19 09:13:10 +02:00
..

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_HOME should point at it, or a java matching that version must be first on PATH.
  • The Android SDK, with ANDROID_HOME (or ANDROID_SDK_ROOT) set - needs at minimum platforms;android-36, build-tools;36.0.0, ndk;30.0.14904198, and cmake;3.22.1 installed (see app/build.gradle.kts's compileSdk/ndkVersion and app/src/main/jni/CMakeLists.txt's cmake_minimum_required for the exact versions this project pins - ../build-image/Dockerfile installs the same ones for CI).
  • ANDROID_NDK_HOME set to that installed NDK's directory.
  • Python 3 + Pillow (pip install Pillow) - needed by scripts/gen_card_images.py/gen_launcher_icon.py, which Gradle's preBuild task runs automatically (see app/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.