Android Emulator Config File Formats: ==================================== Introduction: ------------- The Android emulator supports several file formats for its configuration files, depending on specific usage. This file documents them. I. Android .ini configuration files: ------------------------------------ The code in android/utils/ini.[hc] is used to support a simple .ini file format for some configuration files. Here's the BNF for it: file := <line>* line := <comment> | <LF> | <assignment> comment := (';'|'#') <noLF>* <LF> assignment := <space>* <keyName> <space>* '=' <space>* <valueString> <space>* <LF> keyName := <keyNameStartChar> <keyNameChar>* keyNameStartChar := [A-Za-z_] keyNameChar := [A-Za-z0-9_.-] valueString := <noLF>* space := ' ' | '\t' LF := '\r\n' | '\n' | '\r' noLF := [^<LF>] Or, in plain English: - No support for sections - Empty lines are ignored, as well as lines beginning with ';' or '#' - Lines must be of the form: "<keyName> = <value>" - Key names must start with a letter or an underscore - Other key name characters can be letters, digits, underscores, dots or dashes - Leading and trailing space are allowed and ignored before/after the key name and before/after the value - There is no restriction on the value, except that it can't contain leading/trailing space/tab characters or newline/charfeed characters - Empty values are possible, and will be stored as an empty string. - Any badly formatted line is discarded (and will print a warning) II. Android 'aconfig' configuration files: ------------------------------------------ Alternatively, another configuration file format is supported by the code in android/config.[hc]. Its purpose is to support each config file as a tree of key/value pairs. More specifically: - Each key or value is a string - Each key can be associated either to a value, or a sub-tree - A (key,value) pair is written in the config file as: <keyname> <value> which means the key name, some spaces, then the value. - Dots can be used to separate keys in a tree path, as in: some.other.name value corresponding to a top-level key named 'some' with a single sub-key 'other' which itself has a sub-key 'name' associated to value 'value'. - As a consequence, key names *cannot* contain a dot. - Alternatively, braces can be used to group sub-keys, as in: some { other { name value name2 other-value } } which defines a top-level 'some' key with two sub-keys 'name' and 'name2' - Brace and dot notations are equivalent, so the above config file can also be written as: some.other.name value some.other.name2 other-value - If a key appears twice in the config file, it replaces any assigned value, hence: some-key foo some-key bar defines 'some-key' to 'bar' - If a sharp (#) appears whenever a key name is expected by the parser, then it is considered a comment and will be ignored along anything that follows on the current line.