Disable symlink optimizations in the Testing ART APEX.
Because the Testing ART APEX (`com.android.art.testing`) is
non-updatable, some of its native shared libraries (implicitly added
as dependencies) -- shared with the platform (currently,
`libbacktrace`, `libbase`, `libc++`, `libcrypto`, `liblz4`, `liblzma`,
`libmeminfo`, `libprocinfo`, `libunwindstack`, and `libziparchive`) --
are eligible to the symlink optimization (b/144533348).
As we want this APEX to be self-contained (for testing purposes), we
want to package these dependencies in this APEX (instead of symbolic
links to their counterparts on the `system` partition, which may not
even exist, as in the case of `libbacktrace`). Marking this APEX as
"future updatable" disables all symlink optimizations for it.
Note that the symlink optimization can currently create broken
symlinks), in the case where a dependency is no longer installed in
the `system` partition (b/233357459) -- this was recently the case of
`libbacktrace`.
Also add a check to script `build/apex/art_apex_test.py` to prevent
any regression.
Test: art/build/apex/runtests.sh
Test: atest ArtGtestsTargetChroot
Bug: 232790938
Change-Id: Ic2ebb133f597b7f3d4d0486d8ead5d9746dae776
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 3c305b8..de42615 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -435,7 +435,21 @@
certificate: ":com.android.art.certificate",
tests: art_gtests,
binaries: ["signal_dumper"], // Need signal_dumper for run-tests.
+ // Mark this test APEX as non-updatable, as its contains
+ // additional files (used only for testing) that would not pass
+ // dependency checks performed on updatable APEXes (see
+ // go/apex-allowed-deps-error).
updatable: false,
+ // Because this APEX is non-updatable, some of its native shared
+ // libraries (implicitly added as dependencies) are eligible to
+ // the symlink optimization. As we want this APEX to be
+ // self-contained (for testing purposes), we want to package
+ // these dependencies in this APEX, instead of symbolic links to
+ // their counterparts on the `system` partition, which may not
+ // even exist, as in the case of `libbacktrace` (see b/232790938
+ // and b/233357459). Marking this APEX as "future updatable"
+ // disables all symlink optimizations for it.
+ future_updatable: true,
}
// TODO: Do this better. art_apex_test_host will disable host builds when
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 43fa01c..5ead8da 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -217,6 +217,8 @@
return False, 'Could not find %s'
if fs_object.is_dir:
return False, '%s is a directory'
+ if fs_object.is_symlink:
+ return False, '%s is a symlink'
return True, ''
def is_dir(self, path):