更新记录

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 适合注册、登录、活动入口等单点风控
需要分级处理 读取 riskLevelscore high 可强拦截,medium 可二次验证,low 建议观察
需要后台复核 开启 includeSignals 并上报 signals 证据已做脱敏处理,适合风控日志
需要适配新样本 使用 extraBuildKeywords 等追加规则 可先业务侧验证,再沉淀为插件规则
需要减少返回体积 设置 includeSignals=falseincludeDeviceInfo=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 不主动抛出错误;采集失败会进入 reasonsignals 的 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.qemugoldfishranchuvbox86noxmumuldplayerldmnqdnplayerldconsoleldinitmicrovirtbluestacksgenymotionandroid_x86android-x86blissprimeosphoenixoschromeoscheetsarcvmwindows 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_64x86,插件会先记录 30 分桌面模拟器环境观察信号;若同时命中 fingerprint 中的雷电样本构建片段,会追加雷电强信号并优先推断厂商为雷电。

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

仅命中 x86_64x86 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,可通过 threshold1-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. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: