Turn any website into an APK, with a simple and easy-to-use UI.
- On-Device APK Generation: Convert any website URL into a standalone Android APK directly on your device
- Customizable Apps: Set custom app name, package ID, and app icon for your generated APK
- Material 3 Expressive Design: Modern UI with glass-effect TopAppBar, emphasized transitions, and extra-large corner radii
- Binary Template Modification: Uses pre-compiled WebView template for fast APK generation without Gradle
- Automatic Signing: APKs are signed and ready for installation
- Custom icons don't work
- Offline caching is experimental and may not work correctly on some advanced or dynamic websites
Appy uses a "Binary Template Modification" strategy to generate APKs without running a full Gradle build:
- Template APK: A pre-compiled
base-web-template.apkcontaining a WebView app is bundled in assets (built automatically from thetemplatemodule) - ZIP Manipulation: Uses Zip4j to modify the template APK
- Config Injection: Replaces
assets/config.jsonwith the user's URL and app configuration - Icon Injection: Replaces launcher icons at multiple densities with user-provided icon
- APK Signing: Signs the modified APK using a bundled keystore
├── app/ # Main Appy application
│ ├── src/main/
│ │ ├── java/com/appy/
│ │ │ ├── MainActivity.kt # Main entry point
│ │ │ ├── ui/
│ │ │ │ ├── theme/
│ │ │ │ │ └── AppyTheme.kt # M3 Expressive theme
│ │ │ │ └── screens/
│ │ │ │ └── HomeScreen.kt # Main UI with inputs
│ │ │ └── processor/
│ │ │ └── ApkProcessor.kt # APK generation logic
│ │ ├── assets/
│ │ │ ├── debug.jks # Debug keystore for signing
│ │ │ └── base-web-template.apk # WebView template (auto-generated)
│ │ └── AndroidManifest.xml
│ └── build.gradle.kts
│
├── template/ # WebView template module
│ ├── src/main/
│ │ ├── java/com/webtemplate/
│ │ │ └── MainActivity.kt # WebView activity
│ │ ├── assets/
│ │ │ └── config.json # URL configuration placeholder
│ │ └── res/
│ └── build.gradle.kts
│
└── settings.gradle.kts
- Android Studio Arctic Fox or later
- JDK 17 or higher
- Android SDK with API 35
# Debug build (automatically builds template first)
./gradlew assembleDebug
# Release build (requires signing configuration)
./gradlew assembleReleaseThe build system automatically:
- Compiles the
templatemodule intobase-web-template.apk - Copies it to
app/src/main/assets/ - Builds the main app with the template bundled
The project includes a GitHub Actions workflow (.github/workflows/appy_release.yml) that:
- Builds the release APK on push to version tags (e.g.,
v1.0.0) - Signs the APK using GitHub Secrets
- Creates a GitHub Release with the APK
KEYSTORE_BASE64: Base64-encoded release keystoreKEYSTORE_PASSWORD: Keystore passwordALIAS: Key alias name
The app requires the following permissions:
READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE: For saving generated APKs (Android 10 and below)REQUEST_INSTALL_PACKAGES: For installing generated APKs
This project is open source. See LICENSE for details.