更新记录

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 或设备序列号。

1.0.1(2026-06-03)

  • 增强雷电新版识别:补充 ldmnq / dnplayer / ldconsole / ldinit、新版包名、雷电文件路径、x86/x86_64 ABI 和伪装 Build 组合特征。
  • 优化逍遥/MEmu 识别:补充 com.microvirt.launcher2,厂商口径显示为 逍遥/MEmu
  • 增强夜神可改设备识别:补充 900250224 + x86/x86_64 ABI 组合规则,夜神修改为 HUAWEI LIO-AN00 等设备后仍可优先推断为 夜神
  • 增强夜神 Samsung 伪装样本识别:补充 Samsung SM-G977N / beyond1q / beyond1qlteue / universal8895 + x86/x86_64 ABI 组合规则,避免只显示为通用 Android Emulator。
  • 优化 Android 系统属性证据:同一规则去重展示,getprop 属性值脱敏,避免页面日志展示模拟器伪造的 IMEI/IMSI/手机号/SIM 序列号样式值。
  • Android 未命中任何正向信号时返回 diagnostic/no-positive-signal-build-snapshot,便于根据新模拟器样本补规则。
  • 插件市场平台配置仅勾选 Android 真实支持平台;iOS、Harmony、Web、小程序保持明确降级,不伪造检测成功。
  • Android Manifest 仍仅声明 <queries>,不申请 QUERY_ALL_PACKAGES、电话、短信或设备标识相关权限。
查看更多

平台兼容性

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 App 风控场景的模拟器环境检测 UTS API 插件。它通过 Build 字段、系统属性、包名可见性、文件特征、ABI、传感器与硬件能力等多路信号综合评分,帮助业务判断当前 App 是否运行在模拟器、PC Android、ChromeOS/ARC 或 WSA 等环境中。

当前版本:1.0.3

它解决什么问题

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

功能特色

  • 多信号评分:不是简单判断某个字段,而是将强信号、弱信号和诊断信号合并为 score / riskLevel / isEmulator
  • 厂商推断:覆盖雷电、MuMu、夜神、BlueStacks、逍遥/MEmu、Genymotion、Android Studio Emulator 等常见模拟器。
  • 桌面 Android 识别:能将仅命中 x86 / x86_64 ABI 的环境归类为 桌面虚拟化环境,并进一步识别 Android-x86、Bliss OS、PrimeOS、Phoenix OS、ChromeOS/ARC、WSA。
  • 可解释证据:返回 signals 命中证据,便于页面展示、日志上报、后台复核和新样本补规则。
  • 隐私友好:不读取 IMEI、手机号、SIM、设备序列号,不申请电话、短信或 QUERY_ALL_PACKAGES 权限;getprop 证据只返回脱敏后的属性名。
  • 规则可扩展:业务可以通过 extraBuildKeywords / extraPropertyKeywords / extraPackageNames / extraFilePaths 临时追加样本规则。
  • 明确降级:iOS、Harmony、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 不支持 返回 supported=false,插件市场配置不勾选
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 真实检测;iOS / Harmony / Web / 小程序返回明确降级结果,插件市场配置不勾选。

参数

参数 类型 必填 说明 默认值 可选参数
options EmulatorDetectOptions 检测参数 { threshold: 55, includeSignals: true, includeDeviceInfo: true, includeWeakSignals: true } threshold / includeSignals / includeDeviceInfo / includeWeakSignals / extraBuildKeywords / extraPropertyKeywords / extraPackageNames / extraFilePaths
options.threshold number 判定为模拟器的评分阈值,可由业务手动设置;默认 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,雷电、MuMu、夜神、BlueStacks、逍遥/MEmu、Genymotion、Android Studio Emulator 等主流模拟器的核心 Build、系统属性、核心包名、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 会作为强模拟器或桌面虚拟化信号。
  • 系统属性:通过 /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。弱信号分数低,不会单独决定模拟器结论。
  • 诊断信号:如果所有正向规则都未命中,会返回 diagnostic/no-positive-signal-build-snapshot,包含公开 Build/ABI 快照,便于根据新模拟器样本继续补规则。

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

权限说明

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

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

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

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

仅命中 x86_64x86 ABI 时,插件会优先归类为 桌面虚拟化环境,避免把 Android-x86、ChromeOS/ARC、WSA 等环境误写成官方 Android Emulator。若 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、文件和传感器信号仍可用,但包名可见性可能受限。

示例代码位置

  • 项目演示页:pages/emulatorDetector/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 手动调整;建议先观察真机和目标模拟器样本,再决定是否提高或降低阈值。

作者系列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 模拟器环境检测、风险评分与证据 查看插件

隐私、权限声明

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

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

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

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