Use a different VNDK namespace for product apps
As product partition may have a different VNDK version than that of
vendor partition, they may not share the same VNDK namespace for
their apps.
Define a new vndk_product namespace in the system section for product
apps that uses ro.product.vndk.version.
Bug: 149063221
Test: atest libnativeloader_test
Change-Id: I1bb76617104a49b0d11af13d2f116959a18390a3
diff --git a/libnativeloader/public_libraries.cpp b/libnativeloader/public_libraries.cpp
index 35ef488..277d2c9 100644
--- a/libnativeloader/public_libraries.cpp
+++ b/libnativeloader/public_libraries.cpp
@@ -275,9 +275,7 @@
return android::base::Join(*sonames, ':');
}
-static std::string InitVndkspLibraries() {
- // VNDK-SP is used only for vendor hals which are not available for the
- // product partition.
+static std::string InitVndkspLibrariesVendor() {
std::string config_file = kVndkLibrariesFile;
InsertVndkVersionStr(&config_file, false);
auto sonames = ReadConfig(config_file, always_true);
@@ -288,6 +286,17 @@
return android::base::Join(*sonames, ':');
}
+static std::string InitVndkspLibrariesProduct() {
+ std::string config_file = kVndkLibrariesFile;
+ InsertVndkVersionStr(&config_file, true);
+ auto sonames = ReadConfig(config_file, always_true);
+ if (!sonames.ok()) {
+ LOG_ALWAYS_FATAL("%s", sonames.error().message().c_str());
+ return "";
+ }
+ return android::base::Join(*sonames, ':');
+}
+
static std::string InitNeuralNetworksPublicLibraries() {
return kNeuralNetworksApexPublicLibrary;
}
@@ -352,8 +361,13 @@
return list;
}
-const std::string& vndksp_libraries() {
- static std::string list = InitVndkspLibraries();
+const std::string& vndksp_libraries_product() {
+ static std::string list = InitVndkspLibrariesProduct();
+ return list;
+}
+
+const std::string& vndksp_libraries_vendor() {
+ static std::string list = InitVndkspLibrariesVendor();
return list;
}