libvendorsupport provides an API to replace vndk version
ro.vndk.version cannot be simply replaced with ro.board.api_level with the vndk deprecation. Even with the latest system updates, devices may still run on old vendor images that do not define ro.board.api_level, but define ro.vndk.version. To provide the replacement of ro.vndk.version, provide a platform API AVendorSupport_getVendorApiLevel() to return the expected vendor version. Bug: 312311458 Bug: 312315580 Test: manual test for AVendorSupport_getVendorApiLevel() Change-Id: Id7c04483956d95fd49414cebde41d7cc4d2fb1d1
This commit is contained in:
parent
67027efd06
commit
c0659f0107
3 changed files with 34 additions and 1 deletions
|
@ -23,7 +23,7 @@ cc_library {
|
|||
llndk: {
|
||||
symbol_file: "libvendorsupport.map.txt",
|
||||
},
|
||||
srcs: ["version_props.c"],
|
||||
srcs: ["version_props.cpp"],
|
||||
cflags: [
|
||||
"-Wall",
|
||||
"-Werror",
|
||||
|
@ -32,6 +32,7 @@ cc_library {
|
|||
export_include_dirs: ["include"],
|
||||
shared_libs: [
|
||||
"liblog",
|
||||
"libbase",
|
||||
],
|
||||
}
|
||||
|
||||
|
|
|
@ -44,4 +44,22 @@ int AVendorSupport_getVendorApiLevelOf(int sdkApiLevel);
|
|||
*/
|
||||
int AVendorSupport_getSdkApiLevelOf(int vendorApiLevel);
|
||||
|
||||
#if !defined(__ANDROID_VENDOR__)
|
||||
/**
|
||||
* @brief Provide vendor API level to system modules.
|
||||
*
|
||||
* @details
|
||||
* Before deprecating VNDK, system modules read ro.vndk.version to find the
|
||||
* API level that vendor image had implemented. With the VNDK deprecation, this
|
||||
* must be replaced with ro.board.api_level. However, there still are devices
|
||||
* keeping old vendor partitions with the new system upgraded. In this case, the
|
||||
* VNDK version can be used as before.
|
||||
* This API is for platform only.
|
||||
*
|
||||
* @return ro.vndk.version if exist. Otherwise fallback to ro.board.api_level.
|
||||
* 0 if none of these properties are found. This is unexpected, though.
|
||||
*/
|
||||
int AVendorSupport_getVendorApiLevel();
|
||||
#endif // __ANDROID_VENDOR__
|
||||
|
||||
__END_DECLS
|
||||
|
|
|
@ -16,6 +16,10 @@
|
|||
|
||||
#include <log/log.h>
|
||||
|
||||
#if !defined(__ANDROID_VENDOR__)
|
||||
#include <android-base/properties.h>
|
||||
#endif
|
||||
|
||||
int AVendorSupport_getVendorApiLevelOf(int sdkApiLevel) {
|
||||
if (sdkApiLevel < __ANDROID_API_V__) {
|
||||
return sdkApiLevel;
|
||||
|
@ -39,3 +43,13 @@ int AVendorSupport_getSdkApiLevelOf(int vendorApiLevel) {
|
|||
ALOGE("Unexpected vendor api level: %d", vendorApiLevel);
|
||||
return __INVALID_API_LEVEL;
|
||||
}
|
||||
|
||||
#if !defined(__ANDROID_VENDOR__)
|
||||
int AVendorSupport_getVendorApiLevel() {
|
||||
int vendorApiLevel = android::base::GetIntProperty("ro.vndk.version", 0);
|
||||
if (vendorApiLevel) {
|
||||
return vendorApiLevel;
|
||||
}
|
||||
return android::base::GetIntProperty("ro.board.api_level", 0);
|
||||
}
|
||||
#endif // __ANDROID_VENDOR__
|
Loading…
Reference in a new issue