AOSP offers the following options for storing configuration information on a device:
- System properties
- Hardware abstraction layer (HAL) properties
- System config XML files
- Resource overlays (static and runtime)
System properties
System properties are string key/value pairs stored in the build.prop
global dictionary. System properties are system-wide resources that are easy to
use and have a low performance overhead. When using system properties, you don't
need to use interprocess communication (IPC) even if a system property is shared
across multiple processes. However, system properties are similar to global
variables and can be harmful when misused. The misuse of system properties can
result in issues such as security vulnerabilities and apps becoming inaccessible
to users. Before using system properties to store configuration information,
consider the other configuration options.
For further information on system properties, see Add system properties
HAL properties
When the source of truth for a configuration is from a hardware component on a device, the HAL for the hardware must provide the information for that component. Define a new HAL method in the existing HAL for accessing the configuration. For further information on developing a HAL, see AIDL for HALs.
System config XML files
When the configuration data is static but complicated (structured), consider
using XML or other such formats for the configuration data. Ensure that the
file schema remains stable. For XML files, you can use
xsd_config
to keep the schema stable, and to take advantage of an autogenerated XML
parser.
Resource overlay
You can use resource overlays to customize a product. There are two types of resource overlays:
Standard resource overlay used to customize a product at build time. Foris information on standard resource overlays, see Customizing the build with resource overlays.
Runtime resource overlay (RRO) is used to change the resource values of a target package at runtime. For example, an app installed on the system image might change its behavior based upon the value of a resource. Rather than hardcoding the resource value at build time, an RRO installed on a different partition can change the values of the app's resources at runtime. For more information on RROs, see Change the value of an app's resources at runtime.