# Config Provisioner ## Overview Config Provisioner is an Android system service and broadcast receiver designed to automate device provisioning based on vendor-specific configuration. On device boot, it checks for a vendor configuration file (`/vendor/etc/config_provisioner/vendor.cfg`). If provisioning is enabled and a valid APK URL is provided, it downloads and installs a configuration APK, then configures the device setup wizard according to vendor preferences. ### Key Features - Runs automatically on boot (including locked boot) - Checks for vendor configuration file - Downloads and installs a configuration APK if required - Configures Android Setup Wizard (enables/disables, marks setup complete) - Persists provisioning state to avoid repeated runs ## Vendor Configuration File Format The vendor configuration file is located at `/vendor/etc/config_provisioner/vendor.cfg`. It is a simple key-value file with one setting per line. Lines starting with `#` are comments and ignored. ### Supported Keys - `enable_setup_wizard` (boolean: `true`/`false`/`1`/`0`) - Enables or disables the Android Setup Wizard after provisioning. - `enable_provisioning` (boolean: `true`/`false`/`1`/`0`) - Enables or disables the provisioning process. - `vendor_id` (string) - Identifier for the vendor/device. - `network_timeout` (integer, milliseconds) - Timeout for network operations (e.g., APK download). - `config_apk_url` (string, URL) - URL to the configuration APK to be downloaded and installed. ### Example ``` # Vendor configuration for Config Provisioner enable_setup_wizard=false enable_provisioning=true vendor_id=acme_corp network_timeout=30000 config_apk_url=https://example.com/config/acme_config.apk ``` ## Default Values If a key is missing, the following defaults are used: - `enable_setup_wizard`: true - `enable_provisioning`: true - `network_timeout`: 30000 - `config_apk_url`: https://default.example.com/config.apk ## Logging & Debugging The service logs all configuration values and provisioning steps to logcat under the tags `ConfigProvisioner` and `VendorConfig`. ## Permissions The app requires system-level permissions to install packages, access network state, receive boot events, and modify setup wizard state. ## License