# Description of the legacy desugared library configuration file

## Version

The first field `configuration_format_version` encodes a versioning number internal to R8/D8
in the form of an unsigned integer. It allows R8/D8 to know if the file given is supported.
Non-backward compatible changes to the desugared library increase the version number, and such
library cannot be compiled without upgrading R8/D8 to the latest version.

The fields `group_id` and `artifact_id` are maven-coordinated ids for the desugared library
configuration file.

The field `version` holds the version of the content for the configuration. This number
must be updated each time the configuration is changed.

A unique identifier is generated for the desugared library configuration using
`group_id:artifact_id:version`.

## Required compilation API level

The field `required_compilation_api_level` encodes the minimal Android API level required for
the desugared library to be compiled correctly. If the API of library used for compilation of the
library or a program using the library is lower than this level, one has to upgrade the SDK version
used to be able to use desugared libraries.

## Library and program flags

The fields `library_flags` and `program_flags` include the set of flags required for respectively
the library and the program using the desugared library compilation. The sets of flags are
different depending on the min API level used. The flags are in a list, where each list entry
specifies up to which min API level the set of flags should be applied. During compilation,
R8/D8 adds up all the required flags for the min API level specified at compilation.

For example, let's say the `program_flags` have entries for `api_level_below_or_equal` 20, 24 and
26. If compiling the program for min API 24, R8/D8 will use both the set of flags for API 24 and
26 (24 <= 24, 24 <= 26 but !(24 <= 20)).

## Extra keep rules

The last field is `extra_keep_rules`, it includes keep rules that are appended by L8 when shrinking
the desugared library. It includes keep rules related to reflection inside the desugared library,
related to enum to have EnumSet working and to keep the j$ prefix.

## Copyright

Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.