Provide a new LLNDK for the vendor api level handling
The library provides mapping functions between SDK versions and vendor api levels. Bug: 315056516 Test: atest libvendorsupport-tests Change-Id: I4a4eae0456ebf756badcc80f09a2946f741843c5
This commit is contained in:
parent
004187aced
commit
a68aa85624
8 changed files with 213 additions and 0 deletions
35
libvendorsupport/Android.bp
Normal file
35
libvendorsupport/Android.bp
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2024 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.
|
||||
|
||||
package {
|
||||
default_applicable_licenses: ["Android-Apache-2.0"],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libvendorsupport",
|
||||
native_bridge_supported: true,
|
||||
llndk: {
|
||||
symbol_file: "libvendorsupport.map.txt",
|
||||
},
|
||||
srcs: ["version_props.c"],
|
||||
cflags: [
|
||||
"-Wall",
|
||||
"-Werror",
|
||||
],
|
||||
local_include_dirs: ["include/vendorsupport"],
|
||||
export_include_dirs: ["include"],
|
||||
shared_libs: [
|
||||
"liblog",
|
||||
],
|
||||
}
|
2
libvendorsupport/OWNERS
Normal file
2
libvendorsupport/OWNERS
Normal file
|
@ -0,0 +1,2 @@
|
|||
jiyong@google.com
|
||||
justinyun@google.com
|
7
libvendorsupport/TEST_MAPPING
Normal file
7
libvendorsupport/TEST_MAPPING
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"postsubmit": [
|
||||
{
|
||||
"name": "libvendorsupport-tests"
|
||||
}
|
||||
]
|
||||
}
|
51
libvendorsupport/include/vendorsupport/api_level.h
Normal file
51
libvendorsupport/include/vendorsupport/api_level.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Copyright (C) 2024 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <android/api-level.h>
|
||||
|
||||
#define __ANDROID_VENDOR_API_MAX__ 1000000
|
||||
#define __INVALID_API_LEVEL -1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Find corresponding vendor API level from an SDK API version.
|
||||
*
|
||||
* @details
|
||||
* SDK API versions and vendor API levels are not compatible and not
|
||||
* convertible. However, this function can be used to compare the two versions
|
||||
* to know which one is newer than the other.
|
||||
*
|
||||
* @param sdk_api_level The SDK version int. This must be less than 10000.
|
||||
* @return The corresponding vendor API level of the SDK version. -1 if the SDK
|
||||
* version is invalid or 10000.
|
||||
*/
|
||||
int vendor_api_level_of(int sdk_api_level);
|
||||
|
||||
/**
|
||||
* @brief Find corresponding SDK API version from a vendor API level.
|
||||
*
|
||||
* @param vendor_api_level The vendor API level int.
|
||||
* @return The corresponding SDK API version of the vendor API level. -1 if the
|
||||
* vendor API level is invalid.
|
||||
*/
|
||||
int sdk_api_level_of(int vendor_api_level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
7
libvendorsupport/libvendorsupport.map.txt
Normal file
7
libvendorsupport/libvendorsupport.map.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
LIBVENDORSUPPORT {
|
||||
global:
|
||||
vendor_api_level_of; # llndk systemapi
|
||||
sdk_api_level_of; # llndk systemapi
|
||||
local:
|
||||
*;
|
||||
};
|
33
libvendorsupport/tests/Android.bp
Normal file
33
libvendorsupport/tests/Android.bp
Normal file
|
@ -0,0 +1,33 @@
|
|||
// Copyright (C) 2024 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.
|
||||
|
||||
package {
|
||||
default_applicable_licenses: ["Android-Apache-2.0"],
|
||||
}
|
||||
|
||||
cc_test {
|
||||
name: "libvendorsupport-tests",
|
||||
srcs: [
|
||||
"version_props_test.cpp",
|
||||
],
|
||||
cflags: [
|
||||
"-Wall",
|
||||
"-Werror",
|
||||
],
|
||||
shared_libs: [
|
||||
"libvendorsupport",
|
||||
],
|
||||
test_suites: ["general-tests"],
|
||||
}
|
||||
|
37
libvendorsupport/tests/version_props_test.cpp
Normal file
37
libvendorsupport/tests/version_props_test.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (C) 2024 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.
|
||||
*/
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <vendorsupport/api_level.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace {
|
||||
|
||||
TEST(vendorsupport, get_corresponding_vendor_api_level) {
|
||||
ASSERT_EQ(__ANDROID_API_U__, vendor_api_level_of(__ANDROID_API_U__));
|
||||
ASSERT_EQ(202404, vendor_api_level_of(__ANDROID_API_V__));
|
||||
ASSERT_EQ(__INVALID_API_LEVEL, vendor_api_level_of(__ANDROID_API_FUTURE__));
|
||||
}
|
||||
|
||||
TEST(vendorsupport, get_corresponding_sdk_api_level) {
|
||||
ASSERT_EQ(__ANDROID_API_U__, sdk_api_level_of(__ANDROID_API_U__));
|
||||
ASSERT_EQ(__ANDROID_API_V__, sdk_api_level_of(202404));
|
||||
ASSERT_EQ(__INVALID_API_LEVEL, sdk_api_level_of(__ANDROID_VENDOR_API_MAX__));
|
||||
ASSERT_EQ(__INVALID_API_LEVEL, sdk_api_level_of(35));
|
||||
}
|
||||
|
||||
} // namespace
|
41
libvendorsupport/version_props.c
Normal file
41
libvendorsupport/version_props.c
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Copyright (C) 2024 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.
|
||||
|
||||
#include "api_level.h"
|
||||
|
||||
#include <log/log.h>
|
||||
|
||||
int vendor_api_level_of(int sdk_api_level) {
|
||||
if (sdk_api_level < __ANDROID_API_V__) {
|
||||
return sdk_api_level;
|
||||
}
|
||||
// In Android V, vendor API level started with version 202404.
|
||||
// The calculation assumes that the SDK api level bumps once a year.
|
||||
if (sdk_api_level < __ANDROID_API_FUTURE__) {
|
||||
return 202404 + ((sdk_api_level - __ANDROID_API_V__) * 100);
|
||||
}
|
||||
ALOGE("The SDK version must be less than 10000: %d", sdk_api_level);
|
||||
return __INVALID_API_LEVEL;
|
||||
}
|
||||
|
||||
int sdk_api_level_of(int vendor_api_level) {
|
||||
if (vendor_api_level < __ANDROID_API_V__) {
|
||||
return vendor_api_level;
|
||||
}
|
||||
if (vendor_api_level >= 202404 && vendor_api_level < __ANDROID_VENDOR_API_MAX__) {
|
||||
return (vendor_api_level - 202404) / 100 + __ANDROID_API_V__;
|
||||
}
|
||||
ALOGE("Unexpected vendor api level: %d", vendor_api_level);
|
||||
return __INVALID_API_LEVEL;
|
||||
}
|
Loading…
Reference in a new issue