"Edify" is the scripting language used for Android's update-binary system updater. The language is the successor to the "Amend" language.
Syntax
- The script file must use UNIX newlines as EOL.
- Whitespace (space, tab, LF 0x0a, but not CR 0x0d) may be freely used.
- Comments are any line prefaced with #
- All commands are terminated with a semicolon. Clauses (in ifelse) may contain any number of commands, each terminated with a semicolon.
- Strings are usually delimited with double quotation marks.
- The characters \n, \t, \", and \\ are understood, as are hexadecimal escapes like \x4a
- Numbers are really just strings and are usually not delimited.
- Logical values are "t" for true or "" for false.
- The comparison operators are == (string equal), != (string not equal).
- The logical operators are || (logical or), && (logical and), ! (logical not).
- The concatenation operator is +. (Caution: 2+2==22)
- The conditional keywords if, then, else and endif operate as expected if they are unquoted. The ifelse macro may be used instead.
Functions
Disk operations
- format(fs_type, partition_type, device, fs_size, mountpoint) – usually use "0" for fs_size (entire partition)
- is_mounted(mountpoint)
- mount(fs_type, partition_type, device, mountpoint)
- unmount(mountpoint)
- wipe_cache()
Image operations
- block_image_recover(?, ?)
- block_image_update(device, filelist, newdata, patchdata) – incremental update of a partition
- block_image_verify
- check_first_block(?)
- write_firmware_image
- write_raw_image(filename, device)
File operations
- delete(file) – deletes a file
- delete_recursive(directory) – completely deletes a directory
- getprop(key) – returns a string value of the associated key from the system properties
- file_getprop(file, key) – returns a string value of the associated key from a specific file
- package_extract_dir(source, destination)
- package_extract_file(source, destination) – returns "t" on success and "" on failure (e.g. if the file does not exist in the archive)
- set_perm(user, group, mode, file) – performs a chown, chmod on a file
- set_perm_recursive(user, group, mode, directory) – performs a chown, chmod on all contents of a directory
- sha1_check(file) – return sha1 hash of file
- sha1_check(file, sha1_hex, [sha1_hex2, ...]) – return the hash which matches or "" if none matches
- symlink(target, link0, ...) – create any number of links to a target
Patching operations
- apply_patch(srcfile, tgtfile, tgtsha1, tgtsize, sha1_1, patch_1, ...)
- apply_patch_check(file, [sha1_1, ...])
- apply_patch_space(bytes)
- run_program(program, arg0, ...) – returns the exit code of the program
Control
- abort(message)
- assert(condition0, ...) – aborts and prints on any false condition
- ifelse(condition, trueclause, falseclause) – conditional, falseclause is optional
Predicates
- is_substring(substring, string) – checks to see if string constains substring anywhere
- greater_than_int(x, y) – checks to see if x>y when considered as integers
- less_than_int(x, y) – checks to see if x<y when considered as integers
User feedback
- set_progress(fraction) – advance progress bar a fractional amount
- show_progress(fraction, seconds) – advance progress bar a fractional amount over a period of seconds
- sleep(seconds) – pause a number of seconds
- ui_print(message0, ...) – print any number of strings
Testing
Scripts may be tested by executing update-binary directly:
update-binary version output package
An example would be:
update-binary 2 stdout /sdcard/update.zip