如何判断手机是否是纯血鸿蒙系统

背景介绍

很多应用在纯血鸿蒙系统中功能无法正常使用,这是因为纯血鸿蒙是通过卓易通安装的软件,运行在一个独立的虚拟机中与鸿蒙系统是完全隔离开的。这部分用户反馈我们每次都只能手动纠正标签,解决不了,看着干着急。 那是否有什么办法来判断用户的手机是否是纯血鸿蒙系统呢?

判断方法

常见的错误方法

  1. 按手机机型判断

    • 比如当前常见的业务代码中有类似的判断方法:
    typescript 复制代码
     public static boolean isHarmonyOs() {
       boolean brand = "HUAWEI".equalsIgnoreCase(Build.BRAND) || "HONOR".equalsIgnoreCase(Build.BRAND);
       if (!brand) return false;
       // 下面的代码在冷启动阶段会有发生 ANR 风险,因此除特点机型,没必要执行下述代码
       try {
           Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");
           Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);
           if (osBrand == null) return false;
           return "harmony".equalsIgnoreCase(osBrand.toString());
       } catch (Throwable x) {
           return false;
       }
    }

    这种方式只能判断是否是鸿蒙系统而非纯血鸿蒙系统,且采用反射方法大概率会调用失败并且存在ANR风险

  2. 按系统版本判断

    • 实际上是不可行的,因为是否是纯血鸿蒙与系统版本无关
    • 比如从用户反馈中找到过机型为HUAWEI ALN-AL00 (12)的纯血鸿蒙系统与非纯血鸿蒙系统

正确的判断方法

通过分析系统参数对比,发现可以通过phoneDisplayphoneModel的规则来判断是否是HarmonyOS NEXT:

  • 纯血鸿蒙系统phoneDisplay是以"System"开头的
  • 非纯血鸿蒙系统phoneDisplay是以phoneModel开头的

参数对比分析

HUAWEI ALN-AL00 (12)机型对比

是否是纯血鸿蒙 phoneDisplay phoneModel
System 104.5.0.001(60 H5) ALN-AL00
ALN-AL00 4.2.0.183(C00E165R4P16) ALN-AL00

其他机型对比

HUAWEI PLR-AL50 (12)

是否是纯血鸿蒙 phoneDisplay phoneModel
System 104.5.0.001(60 FA) PLR-AL50
PLR-AL50 4.3.0.160(SP3C00E160R7P7) PLR-AL50

HUAWEI ALT-AL10 (12)

是否是纯血鸿蒙 phoneDisplay phoneModel
System 104.5.0.001(60 CK) ALT-AL10
ALT-AL10 4.2.0.182(C00E162R7P18)I ALT-AL10

代码实现

kotlin 复制代码
fun isHarmonyOSNEXT(): Boolean {
    // 判断是否是华为brand
    val isHuaWeibrand = (
            "HUAWEI".equals(Build.BRAND, ignoreCase = true)
                    || "HONOR".equals(Build.BRAND, ignoreCase = true))
    if (isHuaWeibrand) {
        // 判断是不是纯血鸿蒙
        val phoneDisplay = Build.DISPLAY
        return phoneDisplay.startsWith("System")
    }
    return false
}

上述代码已经在纯血鸿蒙和非纯血鸿蒙机型上验证通过。在实际项目中我们可以添加更多判断防止误判,如仅在非play渠道判断。

应用场景

有了检测方法后,我们可以:

  1. 添加App日志标签:用户反馈时直接打上一个"纯血鸿蒙"的标签
  2. 用户提醒:在首页等地方提醒用户应用不兼容纯血鸿蒙系统
  3. 完善相关业务:在相关业务中完善相关提醒,降低用户反馈
相关推荐
终端安全笔记10 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
字节暗面11 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
传奇开心果编程11 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
2401_8332693013 小时前
RecyclerView多布局详解
android
v_348360876213 小时前
Android_8 zygote启动分析
android
消失的旧时光-194313 小时前
Android 系统层扫盲 11:JNI 到底是什么?Java / Kotlin 是怎么调用 C/C++ 的?
android·binder·zygote·system_server·aops
mmsx14 小时前
Android 地图几万要素卡成幻灯片?顶点缓冲批上传与显存复用
android·opengl·地图·栅格
北京自在科技1 天前
谷歌 Find Hub 迎来新版本更新
android·安卓
古法安卓1 天前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
Htr_1 天前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop