Kiosk App Generator

Generate a ready-to-use kiosk application with a predefined application layout and custom wallpaper. Supports managed config for ongoing customisation and management. Designed to work in tandem with EMM application policies.

Sets the splash screen background and status-bar tint. Set this OR upload a wallpaper to override the KAG-shipped default sunset wallpaper; leave both blank to ship with the default wallpaper.

Choose or drop image

512 × 512 px PNG recommended for Play Store quality. Optionally maskable. A default icon is used if not provided. Icon is not stored, and will need to be provided on subsequent builds.

Columns × rows: or custom: by

Pick a preset, or override with explicit columns and rows. Custom values win when both fields are filled. Max 20 × 20. The launcher always sizes icons to fit (no scroll), so dense grids stay usable but tap targets shrink, and at extreme densities (typically 6+ rows on a phone) the tile labels drop entirely and the grid renders icons-only - a clipped label fragment is worse UX than a clean icon matrix. Keep it sensible for the screen size.

A target, not a guarantee. The launcher shrinks icons below this on dense grids so every tile stays visible without scrolling. Sparse grids render at the full picked size; XL suits very sparse layouts (e.g. 4x1) where standard sizes look stranded in their cells. When the toggle above is enabled in XL mode, icons can expand into available cell space up to a maximum of 512dp - use wisely, as app icon assets are typically designed for 192-432dp and may visibly soften when scaled significantly past their source size.

Each app is placed at an explicit row/column. Two apps may not share a cell. Row/Col ranges update with the kiosk layout above. Tiles for apps not yet installed on the device still render with a placeholder, so layout stays consistent during fleet provisioning.

A folder occupies a single grid cell and opens to show its contained apps in a count-sized overlay (max 3×3 at 9 apps). Each folder needs 2 to 9 apps; tap-to-open then tap an app to launch. Folders share the same row/column grid as apps - they cannot sit on a cell already occupied by an app or another folder. Apps inside a folder render in the order you add them (no per-row/column placement).

Type a package name or pick one from the suggestions (sourced from apps already on the grid). Free-text is supported for targets that aren't tiled but are in the device's lock-task allowlist - e.g. a primary app managed separately by your EMM. Empty = no auto-launch. When set, the launcher waits the grace period (default 10 seconds) after foregrounding, then shows a 3-second countdown dialog before opening the chosen app. Tap Cancel on the dialog to stay on the launcher for this session. The pattern recovers from accidental back-outs of the primary app, while still letting the operator browse other tiles within the grace window. The target package must be in your DPC's lock-task allowlist for the launch to succeed on dedicated devices; if it isn't installed or can't launch, the launcher shows a toast and falls through to the grid.

Choose wallpaper image

Bundled into the APK. Skip BOTH this and the theme colour to use the KAG-shipped default sunset wallpaper. Setting a theme colour (above) without uploading anything ships a solid-colour launcher with no wallpaper. EMM admins can also override at runtime via a wallpaper.url for runtime fetch - no rebuild needed.

Short message shown in the launcher's top strip, to the left of the settings gear. Max 80 chars. Single line - the launcher ellipsizes overflow. EMM admins can swap this at runtime via the banner_text managed-config restriction.

Each enabled toggle adds an entry to the launcher's overflow menu. Leave all off for full lockdown - the menu button disappears entirely.

Hands the launcher's settings to Managed Settings (org.bayton.managedsettings). Tapping it opens Managed Settings for customisable Settings access.

Per-panel toggles below are ignored when this is on. Settings access is configured through the managed configuration of the Managed Settings app itself, pushed by your EMM. Managed Settings must be separately installed on the device - it isn't bundled with this APK. If the package isn't installed, tapping the gear surfaces an "Application not available" toast.

Opens the system Wi-Fi picker. Common for kiosks moved between sites or that need user-driven network changes.

Opens the system Bluetooth settings. Useful for pairing card readers, receipt printers, or other accessories on the fly.

Brightness, sleep timeout, font size. Handy for kiosks deployed across mixed lighting environments.

Volume sliders and notification sound. Most kiosks leave this off and ship with audio pre-configured by policy.

System locale picker. Enable for multi-language sites where end users self-select language.

Battery saver and consumption details. Useful on portable kiosks; usually off for mains-powered deployments.

Manual clock and timezone. Most kiosks should leave this off and rely on automatic network time.

System app manager. Powerful - the user can clear data, force-stop, and uninstall non-system apps. Enable only when the operator deliberately wants that surface exposed.

A hidden drawer of extra apps for field techs and admins. Long-press the settings slot (or the shield, if the settings menu is off) and enter a password to open a scrolling list of these apps. Not an OS escape - the launcher can't leave lock task; it only launches apps you list here, each of which must be in your DPC's lock-task allowlist exactly like the kiosk tiles. The password is a casual-access deterrent, not a strong secret (it ships in the build, like the update code).

Apps shown in the admin drawer, in the order added. The launcher shows each app's real icon and name; the optional label overrides the name. Each package must be in your lock-task allowlist or it can't launch. Max 32.

Used for local testing purposes only, should not be used in production and cannot be deployed through Google Play.
Signed with Bayton's key. Each new build receives a unique package name; supply an update code below to rebuild with the same package name (required for EMM silent-update flows and for republishing to the same Managed Google Play listing). AAB uploads to Managed Google Play are unaffected - Play App Signing takes over after first upload.
Choose keystore file

Your keystore and credentials are used only to sign this build and are never stored. They are purged immediately after the build completes. This is a convenience feature and should never be provided a keystore used to sign any other app; download the application source and sign it directly if you wish to share the keystore.

Enter the update code from a previous build to reuse the same package name. Auto-populated when importing a previous config.

Queued Waiting for a build worker…