Contacts App Generator

Generate a signed Android app that syncs your internal contact files into the device contacts, configured by your EMM or baked in.

Tints the splash screen and system bars. Separate from the accent below, which tints the in-app contact list.

Choose or drop image

512 × 512 px PNG or JPEG recommended (for Play Store quality; optionally maskable). Built into an adaptive launcher icon. Not stored server-side, so re-attach it on each rebuild. A default icon is used if you skip it.

Tints avatars, chips, and highlights in the contact list. Accepts #rgb or #rrggbb. Your EMM can re-tint the deployed app at runtime with the branding_accent managed-config key.

Cards is roomy and avatar-led; Dense packs more contacts onto the screen.

Group the list by source, or list everyone alphabetically A-Z.

How each contact's avatar is drawn in the list. Monogram uses the initials; Icon uses a generic glyph; Photo shows the contact's own picture when the source provides one. A photo only renders from an inline (base64-embedded) image in a VCF source - photo URLs and CSV/JSON sources are not fetched or rendered, and any contact without an embedded photo falls back to its monogram. A baked default the user can change in Settings.

Sets the theme the app opens with - Light, Dark, or Auto (follows the device's day/night setting). This is a baked default, not a hard setting: the user can switch it in the app's Settings. Your EMM can also change it at runtime via the branding_theme_mode managed-config key - and when the EMM pushes that key it becomes locked (enforced, with the in-app control disabled). The same applies to the list layout, grouping, and avatar options.

The on-device account your synced contacts are grouped under (e.g. "Company Contacts") - shown as the source label in the phone's Contacts app, kept separate from the user's personal contacts, and removed cleanly when the app is uninstalled.

Add at least one source. A built-in source bakes a file into the app (works offline, no hosting); a URL source is fetched from your intranet. Any of these can be overridden later by your EMM.

How often the app refreshes contacts in the background. Minimum 15 minutes (Android coalesces background work).

Also refresh immediately when your EMM pushes a new configuration.

Also refresh when the device regains connectivity after being offline.

Skip syncing on metered mobile data.

When off, contacts removed at source are kept on the device.

How long a slow URL source can stall a sync before it is abandoned.

Off by default - sources are fetched over HTTPS only. Baked at build time: enabling HTTP later via managed config needs a rebuild.

Emit detailed sync logs for diagnostics. Noisy; leave off in production.

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).
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.

APK installs directly (sideload, ADB, direct EMM push). AAB is for Managed / private Google Play.

Enter the update code from a previous build to reuse the same package name (for EMM silent updates). Auto-populated when importing a previous config.

Queued Waiting for a build worker…