2.3 KiB
2.3 KiB
APK Direct Release Guide (Local Build + Cloudflare R2)
This is the Dewemoji direct APK release flow.
1) One-time setup
Required tools (local machine)
brew install awscli
brew install --cask android-platform-tools
Required environment variables
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"
Optional:
export DEWEMOJI_APK_URL="https://dewemoji.com/downloads/dewemoji-latest.apk"
Optional signing environment (recommended)
export ANDROID_KEYSTORE_PATH="/absolute/path/release.jks"
export ANDROID_KEYSTORE_PASSWORD="..."
export ANDROID_KEY_ALIAS="..."
export ANDROID_KEY_PASSWORD="..."
2) Canonical URLs used by app updater
https://dewemoji.com/downloads/version.jsonhttps://dewemoji.com/downloads/dewemoji-latest.apk
These endpoints redirect to R2 objects.
3) Release steps
Run from repo root.
A. Build APK
./scripts/apk/build-release.sh
Output APK:
dewemoji-capacitor/dist/apk/dewemoji-v{versionName}-{versionCode}.apk
B. Publish APK + metadata to R2
./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
C. Verify published release
./scripts/apk/verify-release.sh --base-url https://dewemoji.com/downloads
4) Versioning rules
- Site-only deploy: do not bump APK version and do not publish new
version.json. - Runtime/app-shell change: bump
versionCode+versionName, then publish. versionCodemust always increase.- App update prompt appears only when remote
versionCodeis higher.
5) Rollback
- Keep all versioned APK objects immutable (never overwrite).
- Re-upload previous good APK to
apk/dewemoji-latest.apk. - Re-publish
apk/version.jsonwith matching checksum/version fields. - Re-run verify script.
6) Notes
- Direct APK update is user-confirmed install (Android policy), not silent.
- Never embed R2 credentials in app.
- Keep app update payload over HTTPS only.