From 9f95b592f868cf3ae207ee9daa8fe4f6db854049 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 26 Apr 2017 11:38:01 -0700 Subject: [PATCH] Add android.os.VintfRuntimeInfo This is the Java API for ::android::vintf::RuntimeInfo. This will be used by CTS for device info report purposes. Bug: 28656227 Test: cts-tradefed run cts -m CtsEdiHostTestCases --skip-preconditions Change-Id: Id87c95a17e77d7ec1794a6f850de97edf9ae892d --- core/java/android/os/VintfRuntimeInfo.java | 70 ++++++++++++++++++++++++++ core/jni/Android.mk | 1 + core/jni/AndroidRuntime.cpp | 2 + core/jni/android_os_VintfRuntimeInfo.cpp | 80 ++++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 core/java/android/os/VintfRuntimeInfo.java create mode 100644 core/jni/android_os_VintfRuntimeInfo.cpp diff --git a/core/java/android/os/VintfRuntimeInfo.java b/core/java/android/os/VintfRuntimeInfo.java new file mode 100644 index 000000000000..29698b9fa684 --- /dev/null +++ b/core/java/android/os/VintfRuntimeInfo.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 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 android.os; + +/** + * Java API for ::android::vintf::RuntimeInfo. Methods return null / 0 on any error. + * + * @hide + */ +public class VintfRuntimeInfo { + + private VintfRuntimeInfo() {} + + /** + * @return /sys/fs/selinux/policyvers, via security_policyvers() native call + */ + public static native long getKernelSepolicyVersion(); + /** + * @return content of /proc/cpuinfo + */ + public static native String getCpuInfo(); + /** + * @return os name extracted from uname() native call + */ + public static native String getOsName(); + /** + * @return node name extracted from uname() native call + */ + public static native String getNodeName(); + /** + * @return os release extracted from uname() native call + */ + public static native String getOsRelease(); + /** + * @return os version extracted from uname() native call + */ + public static native String getOsVersion(); + /** + * @return hardware id extracted from uname() native call + */ + public static native String getHardwareId(); + /** + * @return kernel version extracted from uname() native call. Format is + * {@code x.y.z}. + */ + public static native String getKernelVersion(); + /** + * @return libavb version in OS. Format is {@code x.y}. + */ + public static native String getBootAvbVersion(); + /** + * @return libavb version in bootloader. Format is {@code x.y}. + */ + public static native String getBootVbmetaAvbVersion(); + +} diff --git a/core/jni/Android.mk b/core/jni/Android.mk index ceb3cc8b4ef5..77c72eb0e3d1 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -97,6 +97,7 @@ LOCAL_SRC_FILES:= \ android_os_Trace.cpp \ android_os_UEventObserver.cpp \ android_os_VintfObject.cpp \ + android_os_VintfRuntimeInfo.cpp \ android_net_LocalSocketImpl.cpp \ android_net_NetUtils.cpp \ android_net_TrafficStats.cpp \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 8ca479478930..372607d86965 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -160,6 +160,7 @@ extern int register_android_os_MessageQueue(JNIEnv* env); extern int register_android_os_Parcel(JNIEnv* env); extern int register_android_os_SELinux(JNIEnv* env); extern int register_android_os_VintfObject(JNIEnv *env); +extern int register_android_os_VintfRuntimeInfo(JNIEnv *env); extern int register_android_os_seccomp(JNIEnv* env); extern int register_android_os_SystemProperties(JNIEnv *env); extern int register_android_os_SystemClock(JNIEnv* env); @@ -1304,6 +1305,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_os_HwParcel), REG_JNI(register_android_os_HwRemoteBinder), REG_JNI(register_android_os_VintfObject), + REG_JNI(register_android_os_VintfRuntimeInfo), REG_JNI(register_android_nio_utils), REG_JNI(register_android_graphics_Canvas), REG_JNI(register_android_graphics_Graphics), diff --git a/core/jni/android_os_VintfRuntimeInfo.cpp b/core/jni/android_os_VintfRuntimeInfo.cpp new file mode 100644 index 000000000000..ecb685435a97 --- /dev/null +++ b/core/jni/android_os_VintfRuntimeInfo.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2017 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. + */ + +#define LOG_TAG "VintfRuntimeInfo" +//#define LOG_NDEBUG 0 + +#include +#include +#include +#include + +#include "core_jni_helpers.h" + +namespace android { + +using vintf::RuntimeInfo; +using vintf::VintfObject; + +#define MAP_STRING_METHOD(javaMethod, cppString) \ + static jstring android_os_VintfRuntimeInfo_##javaMethod(JNIEnv* env, jclass clazz) \ + { \ + const RuntimeInfo *info = VintfObject::GetRuntimeInfo(); \ + if (info == nullptr) return nullptr; \ + return env->NewStringUTF((cppString).c_str()); \ + } \ + +MAP_STRING_METHOD(getCpuInfo, info->cpuInfo()); +MAP_STRING_METHOD(getOsName, info->osName()); +MAP_STRING_METHOD(getNodeName, info->nodeName()); +MAP_STRING_METHOD(getOsRelease, info->osRelease()); +MAP_STRING_METHOD(getOsVersion, info->osVersion()); +MAP_STRING_METHOD(getHardwareId, info->hardwareId()); +MAP_STRING_METHOD(getKernelVersion, vintf::to_string(info->kernelVersion())); +MAP_STRING_METHOD(getBootAvbVersion, vintf::to_string(info->bootAvbVersion())); +MAP_STRING_METHOD(getBootVbmetaAvbVersion, vintf::to_string(info->bootVbmetaAvbVersion())); + + +static jlong android_os_VintfRuntimeInfo_getKernelSepolicyVersion(JNIEnv *env, jclass clazz) +{ + const RuntimeInfo *info = VintfObject::GetRuntimeInfo(); + if (info == nullptr) return 0; + return static_cast(info->kernelSepolicyVersion()); +} + +// ---------------------------------------------------------------------------- + +static const JNINativeMethod gVintfRuntimeInfoMethods[] = { + {"getKernelSepolicyVersion", "()J", (void*)android_os_VintfRuntimeInfo_getKernelSepolicyVersion}, + {"getCpuInfo", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getCpuInfo}, + {"getOsName", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getOsName}, + {"getNodeName", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getNodeName}, + {"getOsRelease", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getOsRelease}, + {"getOsVersion", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getOsVersion}, + {"getHardwareId", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getHardwareId}, + {"getKernelVersion", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getKernelVersion}, + {"getBootAvbVersion", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getBootAvbVersion}, + {"getBootVbmetaAvbVersion", "()Ljava/lang/String;", (void*)android_os_VintfRuntimeInfo_getBootVbmetaAvbVersion}, +}; + +const char* const kVintfRuntimeInfoPathName = "android/os/VintfRuntimeInfo"; + +int register_android_os_VintfRuntimeInfo(JNIEnv* env) +{ + return RegisterMethodsOrDie(env, kVintfRuntimeInfoPathName, gVintfRuntimeInfoMethods, NELEM(gVintfRuntimeInfoMethods)); +} + +}; -- 2.11.0