Merge "Replace direct cgroup access with task profiles"
diff --git a/apexd/apex_constants.h b/apexd/apex_constants.h
index 2c3ea92..e8995ee 100644
--- a/apexd/apex_constants.h
+++ b/apexd/apex_constants.h
@@ -39,6 +39,8 @@
 static constexpr const char* kStagedSessionsDir = "/data/app-staging";
 
 static constexpr const char* kApexDataSubDir = "apexdata";
+// TODO(b/161542925) reject any apex with name equal to kApexSharedLibsSubDir
+static constexpr const char* kApexSharedLibsSubDir = "sharedlibs";
 static constexpr const char* kApexSnapshotSubDir = "apexrollback";
 static constexpr const char* kPreRestoreSuffix = "-prerestore";
 
diff --git a/apexd/apexd.cpp b/apexd/apexd.cpp
index afd4eb6..e12428b 100644
--- a/apexd/apexd.cpp
+++ b/apexd/apexd.cpp
@@ -1022,6 +1022,59 @@
   return revertActiveSessions("");
 }
 
+Result<void> activateSharedLibsPackage(const std::string& mountPoint) {
+  for (const auto& libPath : {"lib", "lib64"}) {
+    std::string apexLibPath = mountPoint + "/" + libPath;
+    if (!std::filesystem::exists(apexLibPath)) {
+      continue;
+    }
+
+    for (const auto& lib_entry :
+         std::filesystem::directory_iterator(apexLibPath)) {
+      if (!lib_entry.is_directory()) {
+        continue;
+      }
+
+      const auto library_name = lib_entry.path().filename();
+      const std::string library_symlink_dir =
+          StringPrintf("%s/%s/%s/%s", kApexRoot, kApexSharedLibsSubDir, libPath,
+                       library_name.c_str());
+
+      if (!std::filesystem::exists(library_symlink_dir)) {
+        std::error_code error_code;
+        std::filesystem::create_directory(library_symlink_dir, error_code);
+        if (error_code) {
+          return Error() << "Failed to create directory " << library_symlink_dir
+                         << ": " << error_code.message();
+        }
+      }
+
+      for (const auto& lib_items :
+           std::filesystem::directory_iterator(lib_entry.path().string())) {
+        const auto hash_value = lib_items.path().filename();
+        const std::string library_symlink_hash = StringPrintf(
+            "%s/%s", library_symlink_dir.c_str(), hash_value.c_str());
+
+        if (std::filesystem::exists(library_symlink_hash)) {
+          // TODO(b/161542925) : Handle symlink from different sharedlibs APEX
+          // with same hash value
+          continue;
+        }
+        std::error_code error_code;
+        std::filesystem::create_directory_symlink(
+            lib_items.path(), library_symlink_hash, error_code);
+        if (error_code) {
+          return Error() << "Failed to create symlink from " << lib_items.path()
+                         << " to " << library_symlink_hash
+                         << error_code.message();
+        }
+      }
+    }
+  }
+
+  return {};
+}
+
 Result<void> activatePackageImpl(const ApexFile& apex_file) {
   const ApexManifest& manifest = apex_file.GetManifest();
 
@@ -1029,7 +1082,6 @@
   // version. Also detect whether this is the highest version.
   // We roll this into a single check.
   bool is_newest_version = true;
-  bool found_other_version = false;
   bool version_found_mounted = false;
   {
     uint64_t new_version = manifest.version();
@@ -1040,7 +1092,6 @@
           if (!otherApex.ok()) {
             return;
           }
-          found_other_version = true;
           if (static_cast<uint64_t>(otherApex->GetManifest().version()) ==
               new_version) {
             version_found_mounted = true;
@@ -1051,7 +1102,12 @@
             is_newest_version = false;
           }
         });
-    if (version_found_active) {
+    // If the package provides shared libraries to other APEXs, we need to
+    // activate all versions available (i.e. preloaded on /system/apex and
+    // available on /data/apex/active). The reason is that there might be some
+    // APEXs loaded from /system/apex that reference the libraries contained on
+    // the preloaded version of the apex providing shared libraries.
+    if (version_found_active && !manifest.providesharedapexlibs()) {
       LOG(DEBUG) << "Package " << manifest.name() << " with version "
                  << manifest.version() << " already active";
       return {};
@@ -1067,19 +1123,38 @@
     }
   }
 
-  bool mounted_latest = false;
-  if (is_newest_version) {
-    const Result<void>& update_st = apexd_private::BindMount(
-        apexd_private::GetActiveMountPoint(manifest), mountPoint);
-    mounted_latest = update_st.has_value();
-    if (!update_st.ok()) {
-      return Error() << "Failed to update package " << manifest.name()
-                     << " to version " << manifest.version() << " : "
-                     << update_st.error();
+  // For packages providing shared libraries, avoid creating a bindmount since
+  // there is no use for the /apex/<package_name> directory. However, mark the
+  // highest version as latest so that the latest version of the package can be
+  // properly reported to PackageManager.
+  if (manifest.providesharedapexlibs()) {
+    if (is_newest_version) {
+      gMountedApexes.SetLatest(manifest.name(), apex_file.GetPath());
+    }
+  } else {
+    bool mounted_latest = false;
+    // Bind mount the latest version to /apex/<package_name>, unless the
+    // package provides shared libraries to other APEXs.
+    if (is_newest_version) {
+      const Result<void>& update_st = apexd_private::BindMount(
+          apexd_private::GetActiveMountPoint(manifest), mountPoint);
+      mounted_latest = update_st.has_value();
+      if (!update_st.ok()) {
+        return Error() << "Failed to update package " << manifest.name()
+                       << " to version " << manifest.version() << " : "
+                       << update_st.error();
+      }
+    }
+    if (mounted_latest) {
+      gMountedApexes.SetLatest(manifest.name(), apex_file.GetPath());
     }
   }
-  if (mounted_latest) {
-    gMountedApexes.SetLatest(manifest.name(), apex_file.GetPath());
+
+  if (manifest.providesharedapexlibs()) {
+    const auto& handleSharedLibsApex = activateSharedLibsPackage(mountPoint);
+    if (!handleSharedLibsApex.ok()) {
+      return handleSharedLibsApex;
+    }
   }
 
   LOG(DEBUG) << "Successfully activated " << apex_file.GetPath()
@@ -1297,19 +1372,46 @@
 }
 
 Result<void> ActivateApexPackages(const std::vector<ApexFile>& apexes) {
+  // Creates /apex/sharedlibs/lib{,64}.
+  std::string sharedLibsSubDir =
+      StringPrintf("%s/%s", kApexRoot, kApexSharedLibsSubDir);
+  if (!std::filesystem::exists(sharedLibsSubDir)) {
+    std::error_code error_code;
+    std::filesystem::create_directory(sharedLibsSubDir, error_code);
+    if (error_code) {
+      return Error() << "Failed to create directory " << sharedLibsSubDir
+                     << ": " << error_code.message();
+    }
+  }
+  for (const auto& libPath : {"lib", "lib64"}) {
+    std::string apexLibPath =
+        StringPrintf("%s/%s", sharedLibsSubDir.c_str(), libPath);
+    if (!std::filesystem::exists(apexLibPath)) {
+      std::error_code error_code;
+      std::filesystem::create_directory(apexLibPath, error_code);
+      if (error_code) {
+        return Error() << "Failed to create directory " << apexLibPath << ": "
+                       << error_code.message();
+      }
+    }
+  }
+
   const auto& packages_with_code = GetActivePackagesMap();
   size_t failed_cnt = 0;
   size_t skipped_cnt = 0;
   size_t activated_cnt = 0;
   for (const auto& apex : apexes) {
-    uint64_t new_version = static_cast<uint64_t>(apex.GetManifest().version());
-    const auto& it = packages_with_code.find(apex.GetManifest().name());
-    if (it != packages_with_code.end() && it->second >= new_version) {
-      LOG(INFO) << "Skipping activation of " << apex.GetPath()
-                << " same package with higher version " << it->second
-                << " is already active";
-      skipped_cnt++;
-      continue;
+    if (!apex.GetManifest().providesharedapexlibs()) {
+      uint64_t new_version =
+          static_cast<uint64_t>(apex.GetManifest().version());
+      const auto& it = packages_with_code.find(apex.GetManifest().name());
+      if (it != packages_with_code.end() && it->second >= new_version) {
+        LOG(INFO) << "Skipping activation of " << apex.GetPath()
+                  << " same package with higher version " << it->second
+                  << " is already active";
+        skipped_cnt++;
+        continue;
+      }
     }
 
     if (auto res = activatePackageImpl(apex); !res.ok()) {
@@ -2246,6 +2348,13 @@
   gMountedApexes.ForallMountedApexes([&](const std::string& package,
                                          const MountedApexData& data,
                                          bool latest) {
+    Result<ApexFile> apex = ApexFile::Open(data.full_path);
+    if (!apex.ok()) {
+      return;
+    }
+    if (apex->GetManifest().providesharedapexlibs()) {
+      return;
+    }
     if (!latest) {
       danglings.insert({package, data});
     }
diff --git a/proto/apex_manifest.proto b/proto/apex_manifest.proto
index 54a63e7..004b53d 100644
--- a/proto/apex_manifest.proto
+++ b/proto/apex_manifest.proto
@@ -59,5 +59,11 @@
   // List of libs required that are located in a shared libraries APEX.
   // Format of the content is 'library:hash'.
   // Example) libc++.so:83d8f50...
+  // TODO(b/161542925) rename to requireSharedApexLibs for consistency.
   repeated string sharedApexLibs = 10;
+
+  // Whether this APEX provides libraries to be shared with other APEXs. This
+  // causes libraries contained in the APEX to be made available under
+  // /apex/sharedlibs .
+  bool provideSharedApexLibs = 11;
 }
diff --git a/tests/Android.bp b/tests/Android.bp
index cf2e119..c1b67bc 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -182,6 +182,7 @@
         ":com.android.apex.test.bar_stripped.v2.libvY_prebuilt",
         ":com.android.apex.test.bar.v1.libvX_prebuilt",
         ":com.android.apex.test.bar.v2.libvY_prebuilt",
+        ":com.android.apex.test.baz_stripped.v1.libvX_prebuilt",
         ":com.android.apex.test.foo_stripped.v1.libvX_prebuilt",
         ":com.android.apex.test.foo_stripped.v2.libvY_prebuilt",
         ":com.android.apex.test.foo.v1.libvX_prebuilt",
diff --git a/tests/src/com/android/tests/apex/SharedLibsApexTest.java b/tests/src/com/android/tests/apex/SharedLibsApexTest.java
index 130573d..362b385 100644
--- a/tests/src/com/android/tests/apex/SharedLibsApexTest.java
+++ b/tests/src/com/android/tests/apex/SharedLibsApexTest.java
@@ -47,6 +47,7 @@
     enum ApexName {
         FOO,
         BAR,
+        BAZ,
         SHAREDLIBS
     }
 
@@ -80,6 +81,9 @@
             case BAR:
                 ret.append("bar");
                 break;
+            case BAZ:
+                ret.append("baz");
+                break;
             case SHAREDLIBS:
                 ret.append("sharedlibs_generated");
                 break;
@@ -167,6 +171,11 @@
         assumeTrue("Device does not support updating APEX", mHostUtils.isApexUpdateSupported());
         assumeTrue("Device requires root", getDevice().isAdbRoot());
 
+        // Pre-installed on /system:
+        //   package bar version 1 using library version X
+        //   package foo version 1 using library version X
+        //   package sharedlibs version 1 exporting library version X
+
         for (String apex : new String[]{
                 getTestApex(ApexName.BAR, ApexType.STRIPPED, ApexVersion.ONE, SharedLibsVersion.X),
                 getTestApex(ApexName.FOO, ApexType.STRIPPED, ApexVersion.ONE, SharedLibsVersion.X),
@@ -186,6 +195,11 @@
                 "/apex/com.android.apex.test.bar/bin/bar_test");
         assertThat(runAsResult).isEqualTo("BAR_VERSION_1 SHARED_LIB_VERSION_X");
 
+        // Updated packages (installed on /data/apex/active):
+        //   package bar version 2 using library version Y
+        //   package foo version 2 using library version Y
+        //   package sharedlibs version 2 exporting library version Y
+
         mPreparer.stageMultiplePackages(
             new String[]{
                 getTestApex(ApexName.BAR, ApexType.STRIPPED, ApexVersion.TWO, SharedLibsVersion.Y),
@@ -205,5 +219,34 @@
         runAsResult = getDevice().executeShellCommand(
             "/apex/com.android.apex.test.bar/bin/bar_test");
         assertThat(runAsResult).isEqualTo("BAR_VERSION_2 SHARED_LIB_VERSION_Y");
+
+        // Assume that an OTA now adds a package baz on /system needing libraries installed on
+        // /system:
+        //
+        // Pre-installed:
+        //   (inactive) package bar version 1 using library version X
+        //   package baz version 1 using library version X
+        //   (inactive) package foo version 1 using library version X
+        //   package sharedlibs version 1 exporting library version X
+        //
+        // Updated packages (installed on /data/apex/active):
+        //   package bar version 2 using library version Y
+        //   package foo version 2 using library version Y
+        //   package sharedlibs version 2 exporting library version Y
+
+        String baz_apex =
+                getTestApex(ApexName.BAZ, ApexType.STRIPPED, ApexVersion.ONE, SharedLibsVersion.X);
+        mPreparer.pushResourceFile(baz_apex, "/system/apex/" + baz_apex);
+        mPreparer.reboot();
+
+        runAsResult = getDevice().executeShellCommand(
+            "/apex/com.android.apex.test.foo/bin/foo_test");
+        assertThat(runAsResult).isEqualTo("FOO_VERSION_2 SHARED_LIB_VERSION_Y");
+        runAsResult = getDevice().executeShellCommand(
+            "/apex/com.android.apex.test.bar/bin/bar_test");
+        assertThat(runAsResult).isEqualTo("BAR_VERSION_2 SHARED_LIB_VERSION_Y");
+        runAsResult = getDevice().executeShellCommand(
+            "/apex/com.android.apex.test.baz/bin/baz_test");
+        assertThat(runAsResult).isEqualTo("BAZ_VERSION_1 SHARED_LIB_VERSION_X");
     }
 }
diff --git a/tests/testdata/sharedlibs/build/Android.bp b/tests/testdata/sharedlibs/build/Android.bp
index 7132696..e228831 100644
--- a/tests/testdata/sharedlibs/build/Android.bp
+++ b/tests/testdata/sharedlibs/build/Android.bp
@@ -49,6 +49,7 @@
     ],
     apex_available: [
         "com.android.apex.test.bar",
+        "com.android.apex.test.baz",
         "com.android.apex.test.foo",
         "com.android.apex.test.sharedlibs_stub",
     ],
diff --git a/tests/testdata/sharedlibs/build/build_artifacts.sh b/tests/testdata/sharedlibs/build/build_artifacts.sh
index c80456a..a584da7 100755
--- a/tests/testdata/sharedlibs/build/build_artifacts.sh
+++ b/tests/testdata/sharedlibs/build/build_artifacts.sh
@@ -6,6 +6,7 @@
   com.android.apex.test.bar_stripped.v2.libvY.apex
   com.android.apex.test.bar.v1.libvX.apex
   com.android.apex.test.bar.v2.libvY.apex
+  com.android.apex.test.baz_stripped.v1.libvX.apex
   com.android.apex.test.foo_stripped.v1.libvX.apex
   com.android.apex.test.foo_stripped.v2.libvY.apex
   com.android.apex.test.foo.v1.libvX.apex
@@ -23,6 +24,7 @@
 # "genrule" type build targets to build, and directory they are built from.
 GENRULE_TARGETS=(
   system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar:com.android.apex.test.bar_stripped
+  system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz:com.android.apex.test.baz_stripped
   system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo:com.android.apex.test.foo_stripped
   system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.sharedlibs:com.android.apex.test.sharedlibs_generated
 )
@@ -76,6 +78,7 @@
         apexfingerprint="VERSION_${apexversion}"
         sed -i "s/#define FINGERPRINT .*/#define FINGERPRINT \"${apexfingerprint}\"/g" \
         system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar/bar_test.cc \
+        system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc \
         system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo/foo_test.cc
 
         for d in "${manifestdirs[@]}"; do
@@ -178,6 +181,7 @@
 sed -i "s/#define FINGERPRINT .*/#define FINGERPRINT \"VERSION_XXX\"/g" \
 system/apex/tests/testdata/sharedlibs/build/sharedlibstest.cpp \
 system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar/bar_test.cc \
+system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc \
 system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo/foo_test.cc
 
 for d in "${manifestdirs[@]}"; do
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/Android.bp b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/Android.bp
new file mode 100644
index 0000000..c1a0ade
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/Android.bp
@@ -0,0 +1,71 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+apex_key {
+    name: "com.android.apex.test.baz.key",
+    public_key: "com.android.apex.test.baz.avbpubkey",
+    private_key: "com.android.apex.test.baz.pem",
+}
+
+android_app_certificate {
+    name: "com.android.apex.test.baz.certificate",
+    certificate: "com.android.apex.test.baz",
+}
+
+apex {
+    name: "com.android.apex.test.baz",
+    manifest: "manifest.json",
+    file_contexts: ":apex.test-file_contexts",
+    key: "com.android.apex.test.baz.key",
+    installable: false,
+    binaries: [ "baz_test" ],
+}
+
+cc_binary {
+    name: "baz_test",
+    srcs: ["baz_test.cc"],
+    shared_libs: [
+      "libsharedlibtest",
+    ],
+    apex_available: [ "com.android.apex.test.baz" ],
+}
+
+genrule {
+    name: "com.android.apex.test.baz_stripped",
+    out: ["com.android.apex.test.baz_stripped.apex"],
+    dist: {
+        targets: ["sharedlibs_test_genfile"],
+    },
+    srcs: [
+        ":com.android.apex.test.baz",
+        "com.android.apex.test.baz.avbpubkey",
+        "com.android.apex.test.baz.pem",
+        "com.android.apex.test.baz.pk8",
+        "com.android.apex.test.baz.x509.pem",
+    ],
+    tools: [
+        "apexer",
+        "debugfs_static",
+        "shared_libs_repack",
+        "signapk",
+    ],
+    cmd: "$(location shared_libs_repack) " +
+         " --mode strip" +
+         " --key $(location com.android.apex.test.baz.pem)" +
+         " --input $(location :com.android.apex.test.baz)" +
+         " --output $(genDir)/com.android.apex.test.baz_stripped.apex" +
+         " --pk8key $(location com.android.apex.test.baz.pk8)" +
+         " --pubkey $(location com.android.apex.test.baz.avbpubkey)" +
+         " --x509key $(location com.android.apex.test.baz.x509.pem)" +
+         " --tmpdir $(genDir)",
+}
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/AndroidManifest.xml b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/AndroidManifest.xml
new file mode 100644
index 0000000..d03d323
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/AndroidManifest.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  package="com.android.apex.test.baz">
+  <!-- APEX does not have classes.dex -->
+  <application android:hasCode="false" />
+</manifest>
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc
new file mode 100644
index 0000000..ea5b341
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc
@@ -0,0 +1,13 @@
+#include <iostream>
+#include <string>
+
+#include "sharedlibstest.h"
+
+// This parameter gets modified by the build_artifacts.sh script.
+#define FINGERPRINT "VERSION_XXX"
+
+int main() {
+  std::cout << "BAZ_" << FINGERPRINT << " "
+            << sharedlibstest::getSharedLibsTestFingerprint();
+  return 0;
+}
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.avbpubkey b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.avbpubkey
new file mode 100644
index 0000000..ef865d7
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.avbpubkey
Binary files differ
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pem b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pem
new file mode 100644
index 0000000..ee8b8a6
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pk8 b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pk8
new file mode 100644
index 0000000..37948c1
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.pk8
Binary files differ
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.x509.pem b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.x509.pem
new file mode 100644
index 0000000..d41d86c
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/com.android.apex.test.baz.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF1zCCA78CFAgqiNJewYXPYz+41LOIDLe9lXnzMA0GCSqGSIb3DQEBCwUAMIGm
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTEiMCAGA1UEAwwZY29t
+LmFuZHJvaWQuYXBleC50ZXN0LmJhejAgFw0yMDExMTAwOTIzNTJaGA80NzU4MTAw
+NzA5MjM1MlowgaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYw
+FAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQL
+DAdBbmRyb2lkMSIwIAYJKoZIhvcNAQkBFhNhbmRyb2lkQGFuZHJvaWQuY29tMSIw
+IAYDVQQDDBljb20uYW5kcm9pZC5hcGV4LnRlc3QuYmF6MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAtm4cczWBEzR+kzRPHsBh61ihAQNtWN2mKLhZZKRS
+YrNZ59+M53menjsc1Bs5fYvKTMGj2u2a/yvq0QiSAlgVMY+1aZ40FN22tBTmy4yr
+6iTMi9Q+uUbQJlHLWSy8n3oFuxEHAP96ZPDJyqPHSJpKeSPKIgwyw3I+nXb/fmB4
+HvBmjHbFnwvKqHFyoEm5p/wGZn2vMtxZqlignNtUZr2zYTJW9YCuL80L/o1jdAFk
+5sHH1tBEcp1ZTXRgKm2XFfp7fqfOWkS9XL3VUF0LVWMgyv0u2fr7n8TPZb8iz5PA
+naCUN9hCoPrj4vg29eVYy2IoeSrLOAUiK986mZDToKbhxuLSHVV+IRNnqIQV0+mu
+rR8OCqDlWbD+fU29cacAjGFt72unLAIEE49GHZFS2pTZ0cDXX1bBUrBVTMlcnCjn
+YiU7XtPaJGelBkJEu/ErjHE9TrsQGKkzMwd2ySTOsk3K4OtWl+E9i50TW8Vu7gR+
+Qr4lZvY90OmXw+k02pkCo5g1GU8uXoTPjd0JQsmiEk01dMIPyWxXBYiuiRUxu3mc
+vYJJGKZSMX3VKKYmtFN9lTuf/OyjztHjRQPit9sWVcYgKuy0kw1LQSJxtyNQIeFm
+ipZVzh8Wo2TMm8argWMPHxyIfjEiVbNhXirC4My0Z02agyyB4Edxg2jkiKQBss3y
+/IECAwEAATANBgkqhkiG9w0BAQsFAAOCAgEArOMz9Hn03yy2ano628v0wXMFixVA
+/XzSpb8GWi4GzJxV96c9t6QQPVdo/XS0uBuEa2Uc0/W5icU9+iKzBvQHM3MI1jI6
+/oj8/mGAzvyvIA0pdKP1XOvugsgi2UDNr5QNgZ1UPIpVkzeBQpLgTiWL70Pl/znE
+b7Q1nKEFeNWxBaMk6u6n6gNh6sMLv1doSCi0FM1cnWHv/0qxPizGjTHKmGs4TbMZ
+zWnBoH8XSMxruAEbucl1E7vYXgYthOW0I+SCFpyP53e9VdoNNYWMeNKCm3EoIY86
+XWLArBBQcCCrsLas45670ouQ/H9Yn498MwFinuWcsfROghXQwhn7fPaDQ2oVlftj
+4LQS2vD20mJV15wa/1n/VDzRAxIZwPdtbJX6JZO8E7Oc0+WSehwhaU+x7k9GYyBv
+tiEGS297qZC0/WvoE3VtRHZjOzphxt6PLelCEoqhdZy+q0uGxj8TmPRXo9xtmBLH
+6GPgZe3dR2SJ4uMqBjt6/6/Rki3du3btAn2O4b0Zf6h3wftqK6INbsJ7fRpIgLaU
+GvCZiCUZaxkNcCO94RnZJrTTVO1rJ1ZBkcqyMHvrSRhPCAyH2zVtHcNDCiR06GNA
++7P5SuyntvmnZKteKc2HdTnm42ewIXyDIwTs1crc8/luevw81s+SJqWumSGTxpfU
+IAM423xlNZfBXZA=
+-----END CERTIFICATE-----
diff --git a/tests/testdata/sharedlibs/build/com.android.apex.test.baz/manifest.json b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/manifest.json
new file mode 100644
index 0000000..1c57f3a
--- /dev/null
+++ b/tests/testdata/sharedlibs/build/com.android.apex.test.baz/manifest.json
@@ -0,0 +1,4 @@
+{
+  "name": "com.android.apex.test.baz",
+  "version": 1
+}
diff --git a/tests/testdata/sharedlibs/build/shared_libs_repack.py b/tests/testdata/sharedlibs/build/shared_libs_repack.py
index c82c131..04e59b5 100644
--- a/tests/testdata/sharedlibs/build/shared_libs_repack.py
+++ b/tests/testdata/sharedlibs/build/shared_libs_repack.py
@@ -279,8 +279,7 @@
         basename = os.path.basename(lib_path_hash[0])
         pb.sharedApexLibs.append(basename + ':' + lib_path_hash[1])
         # Replace existing library with symlink
-        symlink_dst = os.path.join('/', 'apex',
-                                   'com.android.apex.test.sharedlibs',
+        symlink_dst = os.path.join('/', 'apex', 'sharedlibs',
                                    libpath, basename, lib_path_hash[1],
                                    basename)
         os.remove(lib_path_hash[0])
@@ -297,6 +296,15 @@
       f.write(pb.SerializeToString())
 
   if args.mode == 'sharedlibs':
+    # Sharedlibs mode. Mark in the APEX manifest that this package contains
+    # shared libraries.
+    pb = apex_manifest_pb2.ApexManifest()
+    with open(container_files['apex_manifest.pb'], 'rb') as f:
+      pb.ParseFromString(f.read())
+      pb.provideSharedApexLibs = True
+    with open(container_files['apex_manifest.pb'], 'wb') as f:
+      f.write(pb.SerializeToString())
+
     pb = apex_build_info_pb2.ApexBuildInfo()
     with open(container_files['apex_build_info.pb'], 'rb') as f:
       pb.ParseFromString(f.read())
diff --git a/tests/testdata/sharedlibs/prebuilts/Android.bp b/tests/testdata/sharedlibs/prebuilts/Android.bp
index 1198612..74feae2 100644
--- a/tests/testdata/sharedlibs/prebuilts/Android.bp
+++ b/tests/testdata/sharedlibs/prebuilts/Android.bp
@@ -97,6 +97,26 @@
 }
 
 prebuilt_apex {
+  name: "com.android.apex.test.baz_stripped.v1.libvX_prebuilt",
+  arch: {
+    arm: {
+      src: "arm/com.android.apex.test.baz_stripped.v1.libvX.apex",
+    },
+    arm64: {
+      src: "arm64/com.android.apex.test.baz_stripped.v1.libvX.apex",
+    },
+    x86: {
+      src: "x86/com.android.apex.test.baz_stripped.v1.libvX.apex",
+    },
+    x86_64: {
+      src: "x86_64/com.android.apex.test.baz_stripped.v1.libvX.apex",
+    },
+  },
+  filename: "com.android.apex.test.baz_stripped.v1.libvX.apex",
+  installable: false,
+}
+
+prebuilt_apex {
   name: "com.android.apex.test.foo_stripped.v1.libvX_prebuilt",
   arch: {
     arm: {
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v1.libvX.apex
index adab471..8981631 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v2.libvY.apex
index 5c48753..307ef3e 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.bar_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.baz_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.baz_stripped.v1.libvX.apex
new file mode 100644
index 0000000..ffc9686
--- /dev/null
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.baz_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v1.libvX.apex
index 4c6210f..7b8bef5 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v2.libvY.apex
index ff244aa..c393124 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.foo_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
index adec131..89ae2e0 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
index a48fb18..4fcf41e 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v1.libvX.apex
index 9885273..9265b1f 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v2.libvY.apex
index bd33cf8..c8e2b69 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.bar_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.baz_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.baz_stripped.v1.libvX.apex
new file mode 100644
index 0000000..e126f11
--- /dev/null
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.baz_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v1.libvX.apex
index e9f2e05..b27c967 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v2.libvY.apex
index 412b96c..8b80868 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.foo_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
index 8e18b2e..24ea2d1 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
index 1642eba..3f8bcf1 100644
--- a/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/arm64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v1.libvX.apex
index 2761630..4b899e2 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v2.libvY.apex
index 05d5978..32bcbe9 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.bar_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.baz_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.baz_stripped.v1.libvX.apex
new file mode 100644
index 0000000..ed7e479
--- /dev/null
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.baz_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v1.libvX.apex
index 13d02fc..c68a39f 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v2.libvY.apex
index e4cfe90..c8c1a27 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.foo_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
index 00ad1e8..edceab4 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
index 8e24bd1..4fbc2a5 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v1.libvX.apex
index 3e85e58..233b93b 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v2.libvY.apex
index 2d910dc..a8d957a 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.bar_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.baz_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.baz_stripped.v1.libvX.apex
new file mode 100644
index 0000000..21f6a02
--- /dev/null
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.baz_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v1.libvX.apex
index 2d171be..66c3549 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v2.libvY.apex
index 241b578..59195c1 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.foo_stripped.v2.libvY.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
index ddf3490..2f60274 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v1.libvX.apex
Binary files differ
diff --git a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
index 4a61956..dccb630 100644
--- a/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
+++ b/tests/testdata/sharedlibs/prebuilts/x86_64/com.android.apex.test.sharedlibs_generated.v2.libvY.apex
Binary files differ