Revert "Revert "libhidlbase supports API level(29)""
This reverts commit 91b5e43e2274dadeb22c393b56f01f022e5c888d.
-- copied from original --
libhidlbase supports API level(29)
libhidlbase searches impl libs of passthrough HALs from various paths
including VNDK-sp /hw. VNDK-sp path differs in R and Q.
Exempt-From-Owner-Approval: re-landing in the internal branch
Bug: 158564319
Test: install R-built media apex on Q device
atest android.media.cts.MediaDrmClearkeyTest
=> see logcat if there's an error to load libmpeg2extractor
Change-Id: I131d903c43aaaf1ba934933ac89aba5e09a34269
diff --git a/base/HidlInternal.cpp b/base/HidlInternal.cpp
index e38a664..e5c8f70 100644
--- a/base/HidlInternal.cpp
+++ b/base/HidlInternal.cpp
@@ -18,6 +18,9 @@
#include <hidl/HidlInternal.h>
+#ifdef __ANDROID__
+#include <android/api-level.h>
+#endif
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
@@ -50,9 +53,16 @@
LOG(FATAL) << message;
}
-std::string getVndkVersionStr() {
- static std::string vndkVersion = base::GetProperty("ro.vndk.version", "");
- return vndkVersion;
+std::string getVndkSpHwPath(const char* lib) {
+ static std::string vndk_version = base::GetProperty("ro.vndk.version", "");
+#ifdef __ANDROID__
+ static int api_level = android_get_device_api_level();
+ if (api_level >= __ANDROID_API_R__) {
+ return android::base::StringPrintf("/apex/com.android.vndk.v%s/%s/hw/",
+ vndk_version.c_str(), lib);
+ }
+#endif
+ return android::base::StringPrintf("/system/%s/vndk-sp-%s/hw/", lib, vndk_version.c_str());
}
// ----------------------------------------------------------------------
@@ -133,8 +143,7 @@
if (instrumentationLibPath.size() > 0) {
instrumentationLibPaths.push_back(instrumentationLibPath);
} else {
- static std::string halLibPathVndkSp = android::base::StringPrintf(
- HAL_LIBRARY_PATH_VNDK_SP_FOR_VERSION, getVndkVersionStr().c_str());
+ static std::string halLibPathVndkSp = getVndkSpHwPath();
#ifndef __ANDROID_VNDK__
instrumentationLibPaths.push_back(HAL_LIBRARY_PATH_SYSTEM);
#endif