更新记录

1.0.5(2026-08-03)

  • 新增 HarmonyOS 真实检测:基于 @ohos.deviceInfo 公开字段采集品牌、型号、硬件、系统版本和 ABI,并按可解释规则评分。
  • 鸿蒙端补充 emulator、simulator、QEMU、Goldfish、Ranchu、VirtualBox、SDK 镜像及 x86 ABI 观察信号;单独 x86 ABI 不直接跨过默认阈值,降低误判。
  • 鸿蒙真机未命中正向信号时返回脱敏公开设备快照,支持 threshold / includeSignals / includeDeviceInfo / extraBuildKeywords,不申请新增权限。
  • 修复 iOS、Web 与小程序降级结果的 UTS 类型写法,改为显式 EmulatorDetectResult 变量,避免支付宝小程序语法检查拒绝对象字面量断言。

1.0.3(2026-06-23)

  • 统一 Harmony、Web/H5、微信小程序、支付宝小程序降级文案,明确当前真实检测能力仅支持 Android App,避免与插件市场平台配置冲突。
  • 整理 Android extraPackageNames 扫描路径,业务追加包名规则会和内置包名规则走同一套包名、Launcher 可见性检测流程。
  • 增强 uni-app / uni-app x 示例,补充阈值切换、弱信号开关和诊断报告复制/日志输出,方便客户接入服务端风控。
  • README 调整为由浅入深的客户接入文档,不再在说明文档顶部展示版本修复摘要。

1.0.2(2026-06-03)

  • 增强桌面虚拟化环境识别:纯 x86/x86_64 ABI 统一显示为 桌面虚拟化环境,避免仅命中 ABI 时误显示为官方 Android Emulator。
  • 补充 Android-x86、Bliss OS、PrimeOS、Phoenix OS、ChromeOS/ARC、WSA 细分规则,覆盖 Build、getprop 和 Android-x86 常见文件特征。
  • 维持 Android-only 发布口径;不新增敏感权限,不申请 QUERY_ALL_PACKAGES,不读取 IMEI、手机号、SIM 或设备序列号。
查看更多

平台兼容性

uni-app(4.84)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × √ √ √ × √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.84)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × √ × √ ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

lizhao-emu-detect

lizhao-emu-detect 是一个面向 Android / Harmony App 风控场景的模拟器环境检测 UTS API 插件。Android 通过 Build 字段、系统属性、包名可见性、文件特征、ABI、传感器与硬件能力综合评分;Harmony 通过系统公开设备信息、构建字段和 ABI 做可解释评分,帮助业务判断当前 App 是否运行在模拟器或虚拟化环境中。

它解决什么问题

移动端业务经常需要识别异常运行环境,例如批量注册、刷任务、薅活动、虚拟定位、自动化脚本或账号风险登录。单看某一个字段很容易被伪装,也容易误伤真机;lizhao-emu-detect 的目标是把多个公开、低权限、可解释的信号合并成一份检测报告,让业务既能快速拦截高风险环境,也能保留证据用于灰度、审核和服务端风控。

功能特色

  • 多信号评分:不是简单判断某个字段,而是将强信号、弱信号和诊断信号合并为 score / riskLevel / isEmulator。
  • 厂商推断:覆盖雷电、MuMu、夜神、BlueStacks、逍遥/MEmu、Genymotion、Android Studio Emulator 等常见模拟器。
  • 桌面 Android 识别:能将仅命中 x86 / x86_64 ABI 的环境作为 30 分中等观察信号并归类为 桌面虚拟化环境,结合明确系统证据后进一步识别 Android-x86、Bliss OS、PrimeOS、Phoenix OS、ChromeOS/ARC、WSA。
  • Harmony 真实检测:读取 @ohos.deviceInfo 无权限公开字段,识别 emulator、simulator、QEMU、Goldfish、Ranchu、VirtualBox、SDK 镜像及 x86 ABI 观察信号。
  • 可解释证据:返回 signals 命中证据,便于页面展示、日志上报、后台复核和新样本补规则。
  • 隐私友好:不读取 IMEI、手机号、SIM、设备序列号,不申请电话、短信或 QUERY_ALL_PACKAGES 权限;getprop 证据只返回脱敏后的属性名。
  • 规则可扩展:业务可以通过 extraBuildKeywords / extraPropertyKeywords / extraPackageNames / extraFilePaths 临时追加样本规则。
  • 明确降级:iOS、Web、小程序不伪造成功,统一返回 supported=false 和中文原因。

适用业务场景

  • 登录、注册、提现、抽奖、任务领取等高风险动作前做环境检查。
  • 账号风控策略需要把模拟器风险、设备风险、网络风险和行为风险合并判断。
  • 客服、审核或运营需要看到“为什么被判为模拟器”的可解释证据。
  • 新模拟器样本出现时,需要先通过公开 Build/ABI 快照补充规则,再决定是否升级插件版本。

接入方式怎么选

场景 推荐方式 说明
只想快速判断是否模拟器 调用 getEmulatorInfoSync(),读取 isEmulator 适合注册、登录、活动入口等单点风控
需要分级处理 读取 riskLevel 和 score high 可强拦截,medium 可二次验证,low 建议观察
需要后台复核 开启 includeSignals 并上报 signals 证据已做脱敏处理,适合风控日志
需要适配新样本 使用 extraBuildKeywords 等追加规则 可先业务侧验证,再沉淀为插件规则
需要减少返回体积 设置 includeSignals=false 或 includeDeviceInfo=false 适合只在本地做轻量判断的场景

从简单到复杂接入

1. 先拿到检测结论

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

// 最小调用:使用默认阈值 55,并返回命中证据和公开设备信息。
const report = getEmulatorInfoSync()

if (report.supported && report.isEmulator) {
  console.log('当前环境疑似模拟器:', report.vendor, report.score)
}

2. 按风险等级分流

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

// 高风险直接进入强风控,中风险交给短信、人脸或人工审核等二次策略。
const report = getEmulatorInfoSync({ threshold: 55 })

if (report.riskLevel === 'high') {
  console.log('高风险模拟器环境,建议限制关键动作')
} else if (report.riskLevel === 'medium') {
  console.log('中风险环境,建议触发二次验证')
} else {
  console.log('未达到默认模拟器判定阈值')
}

3. 排查新模拟器样本

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

// 临时追加新样本关键字,先在业务侧观察命中质量,再决定是否固化为插件规则。
const report = getEmulatorInfoSync({
  includeSignals: true,
  includeDeviceInfo: true,
  extraBuildKeywords: ['your-emulator-build-keyword'],
  extraPropertyKeywords: ['your-emulator-property-keyword']
})

console.log('模拟器检测证据:', report.signals)

支持平台

平台 是否支持 说明
Android App 支持 真实检测,返回评分、风险等级、厂商推断和命中证据
iOS App 不支持 返回 supported=false,插件市场配置不勾选
Harmony App 支持 基于系统公开设备信息、构建字段和 ABI 的真实 best-effort 检测,无需新增权限
Web/H5 不支持 返回 supported=false,插件市场配置不勾选
微信小程序 不支持 返回 supported=false,插件市场配置不勾选
支付宝小程序 不支持 返回 supported=false,插件市场配置不勾选

安装说明

将插件放入项目 uni_modules/lizhao-emu-detect 后,从插件根目录导入:

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

不要直接导入 utssdk/index.uts 或平台目录文件。

API 列表

  • getEmulatorInfoSync(options?)

getEmulatorInfoSync(options?)

说明

获取当前 App 运行环境的模拟器检测报告。

支持平台

Android / Harmony 真实检测;iOS / Web / 小程序返回明确降级结果,插件市场配置不勾选。

参数

参数 类型 必填 说明 默认值 可选参数
options EmulatorDetectOptions 否 检测参数 { threshold: 55, includeSignals: true, includeDeviceInfo: true, includeWeakSignals: true } threshold / includeSignals / includeDeviceInfo / includeWeakSignals / extraBuildKeywords / extraPropertyKeywords / extraPackageNames / extraFilePaths
options.threshold number 否 判定为模拟器的评分阈值,有效范围 1-100;越界值回退默认值 55 55 1-100
options.includeSignals boolean 否 是否返回命中证据 true true / false
options.includeDeviceInfo boolean 否 是否返回公开设备信息 true true / false
options.includeWeakSignals boolean 否 是否启用弱信号 true true / false
options.extraBuildKeywords Array 否 追加 Build 字段关键字 无 无
options.extraPropertyKeywords Array 否 追加系统属性关键字 无 无
options.extraPackageNames Array 否 追加包名检测规则 无 无
options.extraFilePaths Array 否 追加文件路径检测规则 无 无

返回值

字段 类型 说明
supported boolean 当前平台是否支持真实检测
platform string 平台标识
isEmulator boolean 是否判定为模拟器
score number 总评分,最高 100
riskLevel string 风险等级:none / low / medium / high
vendor string 推断出的模拟器厂商或类型
signals Array 命中证据列表
deviceInfo EmulatorDeviceInfo | null 公开设备信息快照
reason string 中文结果说明或降级原因

风险等级

等级 分数 说明
high >= 75 高风险模拟器环境
medium 55-74 达到默认模拟器判定阈值
low 25-54 有可疑信号,但默认不直接拦截
none < 25 未发现明显模拟器信号

说明:vendor 是厂商推断结果,isEmulator 是最终判定结果。Android 默认阈值为 55,主流模拟器的明确 Build、系统属性、核心包名或文件强特征会直接达到默认阈值,单独 x86 / x86_64 ABI 为 30 分观察信号;Harmony 的明确模拟器构建字段为强信号,单独 x86 ABI 为 35 分观察信号。两端均避免仅凭单一 ABI 判定模拟器。

错误码

错误码 含义 说明
9040001 unsupported 当前平台不支持真实检测
9040002 context unavailable Android Context 不可用

当前同步 API 不主动抛出错误;采集失败会进入 reason 或 signals 的 info 项。

检测信号说明

Android 端会综合以下信号评分:

  • Build 字段:FINGERPRINT / MODEL / MANUFACTURER / HARDWARE / PRODUCT / BRAND / DEVICE / BOARD / TAGS / SUPPORTED_ABIS,其中单独 x86 / x86_64 ABI 作为 30 分中等观察信号,需要结合其他证据判定。
  • 系统属性:通过 /system/bin/getprop 做 best-effort 读取,检测 ro.kernel.qemu、goldfish、ranchu、vbox86、nox、mumu、ldplayer、ldmnq、dnplayer、ldconsole、ldinit、microvirt、bluestacks、genymotion、android_x86、android-x86、bliss、primeos、phoenixos、chromeos、cheets、arcvm、windows subsystem 等关键字;属性证据会脱敏,仅保留属性名和命中规则,不展示属性值。
  • 包名/启动器:检测雷电、MuMu、夜神、BlueStacks、Genymotion、逍遥/MEmu 等已知包名;雷电覆盖 com.ldmnq.launcher / com.ldmnq.launcher3 / com.ldmnq.appstore / com.ldmnq.installer / com.ldmnq.store / com.android.ld.appstore,逍遥/MEmu 覆盖 com.microvirt.launcher / com.microvirt.launcher2。
  • 文件特征:检测 QEMU、Goldfish、BlueStacks、夜神、雷电 ldinit / ldmountsf / ldnetwork / ldconsole / libldutils.so 等常见文件路径。
  • 弱信号:传感器数量、缺失相机/GPS/蓝牙/电话 feature。命中证据仍会完整返回,但全部弱信号累计贡献最多 20 分,不会单独达到默认模拟器判定阈值。
  • 诊断信号:如果所有正向规则都未命中,会返回 diagnostic/no-positive-signal-build-snapshot,包含公开 Build/ABI 快照,便于根据新模拟器样本继续补规则。

Harmony 端会读取 @ohos.deviceInfo 提供的品牌、厂商、产品型号、设备类型、硬件/软件型号、版本标识、构建类型和 ABI。明确的 emulator、simulator、QEMU、Goldfish、Ranchu、VirtualBox、SDK 镜像字段作为强信号;单独 x86 ABI 仅作为 35 分观察信号。未命中时返回 harmony-device-snapshot 诊断证据,不读取 UDID、序列号或其他受限标识。

iOS、Web、小程序端当前不作为插件市场真实支持平台,调用时返回 supported=false 与明确降级原因,不伪造检测成功。

权限说明

  • 不读取 IMEI。
  • 不读取手机号。
  • 不读取 SIM 信息。
  • 不读取设备序列号。
  • getprop 证据只返回脱敏后的属性名,不返回属性值。
  • 不申请电话权限。
  • 不申请短信权限。
  • 不申请 QUERY_ALL_PACKAGES。

Android 11+ 的包名检测依赖 AndroidManifest.xml 中的 <queries> 精准声明。若新增或修改包名规则后需要让包名检测生效,需要重新打并安装 Android 自定义基座。

雷电新版可能会把 brand / manufacturer / model / fingerprint 伪装成真机字段。若日志中 supportedAbis 包含 x86_64 或 x86,插件会先记录 30 分桌面模拟器环境观察信号;若同时命中 fingerprint 中的雷电样本构建片段,会追加雷电强信号并优先推断厂商为雷电。

夜神部分版本允许用户修改设备品牌和型号,因此不能只依赖 HUAWEI LIO-AN00 或 Samsung SM-G977N 这类可改字段。若 fingerprint 中出现夜神样本构建号 900250224,并且同时暴露 x86_64 或 x86 ABI,插件会追加夜神可改设备组合强信号,厂商优先显示为夜神。另保留 Samsung SM-G977N / beyond1q / beyond1qlteue / universal8895 的样本组合规则。

仅命中 x86_64 或 x86 ABI 时,插件会记录 30 分中等观察信号并归类为 桌面虚拟化环境,默认阈值下不会仅凭 ABI 判定模拟器。若 Build 或系统属性进一步命中 android_x86 / android-x86 / bliss / primeos / phoenixos / chromeos / cheets / arcvm / windows subsystem,会追加明确强信号并细分为 Android-x86、Bliss OS、PrimeOS、Phoenix OS、ChromeOS/ARC 或 WSA。

自定义基座说明

本插件没有三方 SDK 依赖。以下情况需要重新打 Android 自定义基座:

  • 首次接入插件并希望 Android 11+ 包名检测生效。
  • 修改 utssdk/app-android/AndroidManifest.xml 的 <queries>。
  • 新增商业模拟器包名检测规则并写入 Manifest。

不运行自定义基座时,Build、getprop、文件和传感器信号仍可用,但包名可见性可能受限。

Harmony 端不依赖三方 SDK,但修改 utssdk/app-harmony 后必须重新生成并安装匹配 HAP;仅更新页面资源不能替换已编译进 HAP 的 UTS 原生模块。

示例代码位置

  • 项目演示页:uni_modules/lizhao-emu-detect/example/uniapp/emulatorDetector.vue
  • 插件内部 uni-app 示例:uni_modules/lizhao-emu-detect/example/uniapp/emulatorDetector.vue
  • 插件内部 uni-app x 示例:uni_modules/lizhao-emu-detect/example/uniappx/index.uvue
  • 示例页已内置阈值切换、弱信号开关和诊断报告复制/日志输出,可直接参考服务端风控上报字段。

uni-app 调用示例

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

const report = getEmulatorInfoSync({
  threshold: 55,
  includeSignals: true,
  includeDeviceInfo: true
})

if (report.supported && report.isEmulator) {
  console.log('命中模拟器环境', report.vendor, report.score, report.signals)
}

uni-app x 调用示例

import { getEmulatorInfoSync } from '@/uni_modules/lizhao-emu-detect'

const report = getEmulatorInfoSync({
  threshold: 55,
  includeSignals: true,
  includeDeviceInfo: true,
  includeWeakSignals: true
})

console.log('模拟器检测报告:' + JSON.stringify(report))

注意事项

  • 模拟器检测本质是猫鼠游戏,雷电、MuMu、夜神、BlueStacks 等主流模拟器会随版本伪装部分字段,因此不要只依赖单个 Build 字段。
  • 建议业务侧同时结合账号、设备行为、网络、登录历史、服务端策略做综合风控。
  • 默认阈值为 55,可通过 threshold 在 1-100 范围内手动调整;越界值回退为 55。建议先观察真机和目标模拟器样本,再决定是否提高或降低阈值。

作者系列UTS插件

以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。

插件 能力方向 插件市场
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

Android 仅采集 Build 字段、公开系统属性、包名可见性、文件存在性和硬件能力特征;Harmony 仅采集 @ohos.deviceInfo 公开设备字段;iOS/Web/小程序不做真实检测,仅返回明确降级结果;不读取 IMEI、手机号、SIM、设备序列号

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无