AmnShield is a privacy-first digital wellness and content-blocking app for Android. It combines app blocking, keyword filtering, focus mode, scheduled blocking, launch limits, and AI-powered image filtering into a single accessibility-service–based guardian.
- Requirements
- Building the App
- Product Flavors
- Android Studio Setup
- If the Build Shows Old UI
- Release Builds
- Project Documentation
| Tool | Version |
|---|---|
| Android Studio | Meerkat or newer |
| Gradle | 9.5+ (managed by wrapper) |
| Android SDK compile target | API 36 |
| Min Android version | API 26 (Android 8.0) |
| JDK | 17 |
⚠️ Important — Product Flavors: AmnShield uses three product flavors (playstore,fdroid,universal). The plainassembleDebugGradle task is no longer valid. Always use a flavor-qualified task. Running bareassembleDebugwill silently serve a stale cached APK with old UI and themes.
# Build all three flavors at once (recommended)
.\gradlew assemblePlaystoreDebug assembleFdroidDebug assembleUniversalDebug
# Or build individually
.\gradlew assemblePlaystoreDebug # Google Play Store flavor
.\gradlew assembleFdroidDebug # F-Droid / offline license flavor
.\gradlew assembleUniversalDebug # Universal / sideload flavorAPK output paths:
| Flavor | APK Location |
|---|---|
| playstore | app/build/outputs/apk/playstore/debug/app-playstore-debug.apk |
| fdroid | app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk |
| universal | app/build/outputs/apk/universal/debug/app-universal-debug.apk |
| Flavor | Description | Google Services | Billing |
|---|---|---|---|
playstore |
Google Play Store distribution | ✅ Firebase, Play Billing | Play Billing |
universal |
Sideload / alternative stores | ✅ Firebase | Play Billing |
fdroid |
F-Droid / fully open source | ❌ No Google dependencies | Offline ECDSA license |
Each flavor has its own source set under app/src/<flavor>/java/ for swapping
billing and sign-in implementations without #ifdef-style hacks.
- Open the project root in Android Studio.
- Open the Build Variants panel (
View → Tool Windows → Build Variants). - Set the Active Build Variant for
:appto one of:playstoreDebugfdroidDebuguniversalDebug
- Hit Run ▶ as normal.
If the Build Variants panel shows just
debug(no flavor prefix), the IDE has not yet synced the new flavor configuration. Run File → Sync Project with Gradle Files to fix it.
If you see the legacy purple gradient background, old DeenShield icons, or the old Settings bottom-nav tab instead of the new Blocks tab, the Gradle build cache is serving a stale APK. Fix it by doing a clean build:
# Step 1: Wipe all build outputs and cached intermediates
.\gradlew clean --no-daemon
# Step 2: Rebuild fresh (--no-daemon forces a new JVM, bypassing any stale cached daemon)
.\gradlew assemblePlaystoreDebug assembleFdroidDebug assembleUniversalDebug --no-daemonThe --no-daemon flag is the key — without it, Gradle may reuse an old daemon process
pinned to a previous Gradle version that has incorrect cached fingerprints.
| Flavor | Published to | Audience |
|---|---|---|
universal |
✅ GitHub Releases | Standard Android — sideloading with Google Play Services |
fdroid |
✅ GitHub Releases | De-Googled phones (GrapheneOS, CalyxOS, LineageOS without GMS) |
playstore |
✅ Play Console only | Google Play Store users — never published to GitHub |
universalandfdroidare not interchangeable. Theuniversalflavor depends on Google Play Services for billing and sign-in. Users on de-Googled ROMs must use thefdroidAPK, which has zero Google dependencies and uses offline ECDSA licensing instead.
The release.yml workflow fires automatically when you push a version tag. It builds, signs, and publishes both APKs to GitHub Releases:
# Tag a release (triggers the workflow)
git tag v1.2.3
git push origin v1.2.3For Self Build:
# GitHub Releases (the two public APKs)
.\gradlew assembleUniversalRelease
.\gradlew assembleFdroidRelease
# Play Store (submitted via Play Console, not GitHub)
.\gradlew assemblePlaystoreReleaseNever commit
keystore.propertiesor.jksfiles to version control. These are already listed in.gitignore.
| File | Description |
|---|---|
| TESTING_GUIDE.md | Full manual test scenarios for all features |
| ROADMAP.md | Feature roadmap and recent changelog |
| PRIVACY_POLICY.md | App privacy policy |
| TERMS_OF_SERVICE.md | Terms of service |
| FDROID_PUBLISHING_GUIDE.md | Steps to publish on F-Droid |
| MONETIZATION_SETUP_GUIDE.md | Lemon Squeezy + Supabase licensing setup |
| ERROR_REPORTING_IMPLEMENTATION_GUIDE.md | Error reporting architecture |
This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.