Reland: Support pass BCP art/vdex/oat files by FD
The original implementation in odrefresh generated inconsistent number
of files between jars and other files. The code is reworked.
Original description:
This is currently used by odrefresh.
Main runtime changes are:
1. When reading the image header, also tries to read from the FD if
provided.
2. Initialize the art/vdex/odex FDs in the boot image chunk if provided.
This allows them to be opened (in case if the file is not accessible
by path) in LoadComponents.
3. OpenBootDexFiles: accept BCP JARs passed as FD, in case if the file
is not accessible by path.
4. The new FDs are passed from new runtime args,
-Xbootclasspath{art,vdex,oat}fds.
It is used in odrefresh to pass the previous output of BCP extensions to
be used in the next phase, system server compilation.
Bug: 193720426
Test: odrefresh --use-compilation-os=10 --force-compile # exit 80
odrefresh --verify # exit 0 (was 79 previosly)
Test: Verify the checksum of output files are the same, with
--use-compilation-os or not, i.e. regardless where the compilation
happens
Test: mma in art/
Test: odsign_e2e_tests
Change-Id: Ie3ae48c7d70a2779cfbd80b307199a0f327c895c
14 files changed