# Direct APK Release Guide (No Play Store) This guide is for shipping Dewemoji Android builds as downloadable `.apk` files from your own site. ## 1) One-time prerequisites 1. Decide and keep a stable Android package id (example: `com.dewemoji.app`). 2. Create and securely store a release keystore. 3. Keep the same keystore for all future updates. 4. Keep `versionCode` strictly increasing for each release. If keystore or package id changes, users will not receive in-place updates. --- ## 2) Build release APK Use your Android build command (NativePHP/Capacitor/Gradle), and ensure output is a **release APK**. Typical Gradle command: ```bash ./gradlew assembleRelease ``` Expected output path (common): ```bash android/app/build/outputs/apk/release/app-release.apk ``` --- ## 3) Sign and verify APK If your build pipeline does not auto-sign, sign manually. ### A) Sign ```bash apksigner sign \ --ks /path/to/keystore.jks \ --ks-key-alias your_alias \ --out dewemoji-vX.Y.Z.apk \ android/app/build/outputs/apk/release/app-release.apk ``` ### B) Verify signature ```bash apksigner verify --verbose --print-certs dewemoji-vX.Y.Z.apk ``` --- ## 4) Generate checksum Publish SHA-256 so users can verify file integrity. ```bash shasum -a 256 dewemoji-vX.Y.Z.apk ``` Record output in release notes. --- ## 5) Upload APK to your server Recommended path: ```text https://dewemoji.com/downloads/dewemoji-vX.Y.Z.apk ``` Recommended server headers: 1. `Content-Type: application/vnd.android.package-archive` 2. `Content-Disposition: attachment; filename="dewemoji-vX.Y.Z.apk"` 3. Serve over HTTPS only --- ## 6) Update Download page content On your `/download` page, show: 1. Version (`vX.Y.Z`) 2. Build date 3. File size 4. Minimum Android version 5. SHA-256 checksum 6. Install instructions 7. Changelog Recommended install instructions for users: 1. Download APK from official Dewemoji URL. 2. Open file on Android. 3. Allow installation from browser/files app if prompted. 4. Install/update. --- ## 7) Release checklist Before publishing: 1. Login works 2. Search works 3. Copy/insert flow works on device 4. Theme/tone UI works 5. Billing links/webviews (if used) open correctly 6. No crash on cold start 7. Version updated and visible in app --- ## 8) Quick rollback If latest APK is bad: 1. Re-point Download button to previous APK URL. 2. Keep bad APK file archived (do not overwrite silently). 3. Publish rollback notice/changelog update. --- ## 9) Recommended file naming Use immutable names: ```text dewemoji-v1.1.1.apk dewemoji-v1.1.2.apk ``` Avoid re-uploading different binaries under the same filename.