KIOSK APP GENERATOR runs entirely in the browser. There is nothing to install locally and no Android development environment to set up. You'll need a list of the apps you want to expose (by package name), and an EMM (or adb) to push the resulting launcher artefact to a device.
Before you build, have the following to hand:
com.android.chrome, com.example.myapp). Apps are not bundled into the launcher; they're linked by package name, so they must be installed separately on the target devices, typically by your EMM. adb shell pm list packages on a connected device shows you what's installed.kiosk_config.json, import it first. The form will pre-populate with the original app name, grid, folders, signing choice, output format and update code. Icons, wallpapers and keystores are not embedded in the JSON, so upload those again if required.The result page contains:
kiosk_config.json. This is the full configuration that produced the build; paste it back into the form's Import config field to pre-populate every setting for a future rebuild.The update code is required to keep the same Android package name across rebuilds. Without it, the next build is treated as a new app and won't satisfy EMM silent-update flows or re-publish to the same Managed Google Play listing. Store it alongside the keystore credentials for whichever app it belongs to.
Push the APK or AAB through your EMM as you would any other app. To take over as the home screen, your EMM's kiosk or lock-task policy needs to designate the KAG package as the home activity:
role.roleType: KIOSK on the launcher application. Ensure every tile-target package is also present in applications with a force-install style install type.DevicePolicyManager.addPersistentPreferredActivity for CATEGORY_HOME against the KAG package, and add the package to setLockTaskPackages if you want full lock-task mode.Without that policy step, KAG installs as a regular app and the system launcher continues to be shown.
Every app surfaced by KAG also needs to be allowed by the kiosk policy. KAG can show a tile for com.example.app, but Android will still block the launch if that target app is not installed, not force-installed, or not included in the lock-task allowlist.
To update an existing launcher, import the previous kiosk_config.json, make the required change, and keep the update code in place. KAG will reuse the original package name so an EMM can replace the installed APK silently.
If you build without the update code, the new artefact is a separate Android app with a new package name. That's useful for variants, testing, or parallel pilots, but it won't update devices already running the earlier build.
The source archive is a complete Android project after template substitution. It contains the Kotlin, XML, Gradle files and build metadata used by KAG, but not your keystore or signing passwords.
For a debug rebuild, unzip the source and run ./gradlew :app:assembleDebug. For a release rebuild, copy signing.properties.template to signing.properties, fill in your keystore details, then run ./gradlew :app:assembleRelease or ./gradlew :app:bundleRelease.
Are you in need of further help, or would you like to raise a feature request? You can: