一、简介
Android应用可以在鸿蒙系统中运行是因为鸿蒙系统提供了一种兼容层(compatibility layer)来支持Android应用的运行。
鸿蒙系统的兼容层是一个软件层,用于在鸿蒙系统内部模拟Android运行环境。这个兼容层可以实现在鸿蒙系统上运行Android应用的关键功能,例如处理Android应用程序包(APK)的安装、解析和执行,还包括实现Android应用所依赖的核心组件、库和API的功能。
当你在鸿蒙系统中安装并启动一个Android应用时,鸿蒙系统会使用兼容层来创建一个虚拟的Android运行环境,并在该环境中加载和执行应用的代码。兼容层会在鸿蒙系统底层和Android应用之间建立一个桥接,实现双方的交互。
当我们在Android应用代码中获取系统版本时,其实获取的是虚拟的Android环境的系统版本,如何在Android应用中获取鸿蒙手机的系统版本呢?
二、获取鸿蒙系统版本
封装鸿蒙工具类:
import android.text.TextUtils;
import java.lang.reflect.Method;
public class HarmonyUtils {
/**
* 是否为鸿蒙系统
* @return true为鸿蒙系统
*/
public static boolean isHarmonyOs() {
try {
Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");
Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);
return "Harmony".equalsIgnoreCase(osBrand.toString());
} catch (Throwable x) {
return false;
}
}
/**
* 获取鸿蒙系统版本号(大版本号)
* @return 版本号
*/
public static String getHarmonyVersion() {
return getProp("hw_sc.build.platform.version", "");
}
/**
* 通过反射获取属性
* @param property
* @param defaultValue
* @return
*/
private static String getProp(String property, String defaultValue) {
try {
Class spClz = Class.forName("android.os.SystemProperties");
Method method = spClz.getDeclaredMethod("get", String.class);
String value = (String) method.invoke(spClz, property);
if (TextUtils.isEmpty(value)) {
return defaultValue;
}
return value;
} catch (Throwable e) {
e.printStackTrace();
}
return defaultValue;
}
/**
* 获得鸿蒙系统版本号(含小版本号,实际上同Android的android.os.Build.DISPLAY)
* @return 版本号
*/
public static String getHarmonyDisplayVersion() {
return android.os.Build.DISPLAY;
}
}
注:在使用过程中,首先判断手机是否是鸿蒙系统,如果是的话,在获取鸿蒙版本号。