Prebuilts of APIs from platform and other Mainline modules that the ART Module
needs.

These prebuilts should reflect the APIs in Android 12 (version 31), which is the
earliest release that may take an update of the ART Module. Hence updating the
prebuilts to newer versions needs to be done with care. Prebuilts that are part
of the NDK are generally safe since they are annotated to provide a version 31
compatible ABI.

To update:

1. Submit the changes that need to go into the prebuilts.

2. Wait for new builds on branches `aosp-master` and/or `aosp-master-throttled`,
   depending on which prebuilts are required. See `update.py` for details about
   which branches and targets are used for what.

   In general `mainline_modules_sdks-userdebug` is the slowest build to
   complete, so look for that to be on the safe side.

3. Run:

   ```
   prebuilts/runtime/mainline/update.py \
     --aosp-master-build <build id> --aosp-master-throttled-build <build id>
   ```

   where the two `<build id>` are the builds from step #2.

   The script will download, extract and put the right prebuilts in the right
   places in `prebuilts/runtime`, `prebuilts/module_sdk/conscrypt`, and/or
   `prebuilts/module_sdk/StatsD`. However, some prebuilts may not have
   corresponding CI builds so they may not be complete - see `update.py` for
   details.

4. Try to minimize the updates in the created CLs and ensure they are safe. This
   usually means reverting some prebuilts back to their old contents, and
   reverting specific hunks in the Android.bp files. Also, please improve the
   autogenerated CL descriptions to make them more accurate and describe the
   reason for the update. Please avoid doing any other changes - in particular
   there must be no local change in any prebuilt file (not counting
   Android.bp's). mast@google.com is happy to help with review.

Note that the script takes a `--local-dist` argument that you can use to test
with prebuilts from a local build in another tree. However, CLs created that way
should not be submitted.
