Add a standalone Android app with the same daily reading and config page
build / build (push) Successful in 4m8s
build / build (push) Successful in 4m8s
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.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# 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`](../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`).
|
||||
|
||||
```bash
|
||||
./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.
|
||||
Reference in New Issue
Block a user