Stack sats or die trying.
- Android Studio (latest stable) — download from https://developer.android.com/studio
- Java 17+ — usually bundled with Android Studio
- Open Android Studio
- File → Open → select the
bitcoin-boogie-androidfolder - Wait for Gradle sync to finish (may take a few minutes first time)
- Build → Build Bundle(s) / APK(s) → Build APK(s)
- APK will be at:
app/build/outputs/apk/debug/app-debug.apk
For a signed release APK:
- Build → Generate Signed Bundle / APK
- Select APK
- Create a new keystore — save this keystore file! You need it for every future update AND for Zapstore certificate linking
- Build
- Release APK at:
app/build/outputs/apk/release/app-release.apk
# Debug build
./gradlew assembleDebug
# Release build
./gradlew assembleRelease# Connect phone via USB with developer mode enabled
adb install app/build/outputs/apk/debug/app-debug.apkOr transfer the .apk file to your phone and tap to install.
If you don't have one, create one with any Nostr client (Damus, Primal, Amethyst, etc.). You'll need your nsec (private key) for signing releases.
Create a repo (e.g. github.com/yourusername/bitcoin-boogie) and push this project.
Zapstore verifies developers by checking your repo, so this is important.
# Option A: Go install
go install github.com/zapstore/zsp@latest
# Option B: Download binary from
# https://github.com/zapstore/zsp/releaseszsp publish --wizardThe wizard walks you through:
- Source selection — point it to your GitHub repo
- Metadata — app name, description, icon, screenshots
- Signing — signs the release with your Nostr key
- Certificate linking — links your APK signing keystore to your Nostr identity (one-time step, have your .jks keystore file ready). This creates a cryptographic proof (NIP-C1) that you control the key that signs your app.
- Publish — pushes to Zapstore relays
The wizard creates a zapstore.yaml in your repo root. Commit this file.
The first time you publish:
- The wizard writes
zapstore.yamlwith your repo URL and npub to your repo root - Commit and push
zapstore.yamlto your GitHub repo - Publish — the Zapstore relay fetches
zapstore.yamlfrom your repo, verifies the pubkey matches, and whitelists you - All future publishes pass immediately
If your Nostr identity already has social reputation (followers, activity), you may be whitelisted automatically via the Vertex reputation system.
Add a Lightning address to your Nostr profile. Users can zap you directly in Zapstore. You receive 100% of payments — no middleman, no 30% cut.
Once whitelisted, future updates are one command:
zsp publish -r github.com/yourusername/bitcoin-boogiebitcoin-boogie-android/
├── app/
│ ├── src/main/
│ │ ├── assets/
│ │ │ └── index.html ← The game
│ │ ├── java/.../MainActivity.java ← WebView wrapper
│ │ ├── AndroidManifest.xml
│ │ └── res/ ← Icons, themes, strings
│ └── build.gradle ← App build config
├── build.gradle ← Project build config
├── settings.gradle
├── zapstore.yaml ← Created by zsp wizard (commit this!)
└── gradle/ ← Gradle wrapper
- Update the game: Edit
app/src/main/assets/index.html - Change app icon: Replace the vector drawable in
res/drawable/ic_launcher_foreground.xmlor use Android Studio's Image Asset tool (right-click res → New → Image Asset) - Change app name: Edit
res/values/strings.xml - Change package ID: Update
applicationIdinapp/build.gradleand the package inAndroidManifest.xmlandMainActivity.java
- Update
app/src/main/assets/index.htmlwith your changes - Bump
versionCode(must increase) andversionNameinapp/build.gradle - Build signed release APK
zsp publish -r github.com/yourusername/bitcoin-boogie
That's it. Your users get the update in Zapstore.