4.0 KiB
4.0 KiB
Dewemoji APK Companion Runbook
This is the single guide for APK build, release, direct distribution, and versioning.
1) Scope
The Android companion uses:
- local bundled UI (
dewemoji-capacitor/src->dewemoji-capacitor/www) - native floating bubble launcher (copy/search workflow)
- direct APK update via hosted
version.json
The bubble is not an IME and does not perform direct cross-app insertion.
2) Prerequisites
- Node.js
20+ - JDK
17 - Android SDK / Android Studio
adb- optional signing toolchain (
apksigner)
Install deps once:
cd /Users/dwindown/Developments/dewemoji
npm --prefix dewemoji-capacitor install
3) Source and build model
Do not edit dewemoji-capacitor/www/* directly.
- edit source in
dewemoji-capacitor/src/* - generate runtime assets via:
npm --prefix dewemoji-capacitor run build
4) Debug build and device install
cd /Users/dwindown/Developments/dewemoji
npm --prefix dewemoji-capacitor run build
cd dewemoji-capacitor
npx cap sync android
cd android
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
5) Release build
From repo root:
./scripts/apk/build-release.sh
Script behavior:
- read
versionCodeandversionNamefromandroid/app/build.gradle - rebuild web assets
- run
cap sync android - build release APK
- sign if signing env vars are present
- output artifact under
dewemoji-capacitor/dist/apk/
Output naming:
dewemoji-v{versionName}-{versionCode}.apk
6) Signing env (optional but recommended)
export ANDROID_KEYSTORE_PATH="/absolute/path/release.jks"
export ANDROID_KEYSTORE_PASSWORD="..."
export ANDROID_KEY_ALIAS="..."
export ANDROID_KEY_PASSWORD="..."
7) Direct release to Cloudflare R2
Required env:
export R2_ACCOUNT_ID="..."
export R2_ACCESS_KEY_ID="..."
export R2_SECRET_ACCESS_KEY="..."
export R2_BUCKET="dewemoji-downloads"
export R2_PUBLIC_BASE_URL="https://downloads.dewemoji.com"
Canonical update URLs used by app updater:
https://dewemoji.com/downloads/version.jsonhttps://dewemoji.com/downloads/dewemoji-latest.apk
Publish:
./scripts/apk/publish-r2.sh \
--apk dewemoji-capacitor/dist/apk/dewemoji-v1.1.2-112.apk \
--version-name 1.1.2 \
--version-code 112 \
--min-supported-version-code 100 \
--notes "Bug fixes and update UX improvements" \
--force false
Verify:
./scripts/apk/verify-release.sh --base-url https://dewemoji.com/downloads
8) Versioning rules
versionCodemust increase on every release.versionNameis user-facing label; ordering usesversionCode.- upload APK first, then publish/update
version.json. - never compare update order using
versionName.
Expected version.json fields:
versionName(string)versionCode(number)apkUrl(string)notes(optional)force(optional bool)
9) Rollback
- keep old versioned APK objects immutable
- repoint latest artifact (
dewemoji-latest.apk) to known good version - republish matching
version.json - rerun verify script
10) High-value troubleshooting
cap sync android failures
npm --prefix dewemoji-capacitor install
cd dewemoji-capacitor
npx cap sync android
Bubble not appearing
- confirm overlay permission
- confirm notification permission (Android 13+)
- remove OEM battery restrictions
APK still shows old UI
Rebuild assets, sync, and reinstall debug APK.
11) Key files
dewemoji-capacitor/src/index.htmldewemoji-capacitor/src/app.cssdewemoji-capacitor/src/app.jsdewemoji-capacitor/android/app/build.gradledewemoji-capacitor/android/app/src/main/java/com/dewemoji/app/MainActivity.javadewemoji-capacitor/android/app/src/main/java/com/dewemoji/app/OverlayBubbleService.javadewemoji-capacitor/android/app/src/main/java/com/dewemoji/app/plugins/DewemojiOverlayPlugin.javascripts/apk/build-release.shscripts/apk/publish-r2.shscripts/apk/verify-release.sh