文章目录

  • 前言
  • 原理
  • 禁止模拟器安装apk
  • 代码识别
  • 验证
  • 最后

前言

对于android开发者来说,模拟器是开发工具,但是对用户来说,可能就是薅羊毛找漏洞的赚钱工具。

不管是活动风控还是内容保护等等其他的出发点,应要求可能会要识别Android模拟器,甚至禁止模拟器登录或后续操作。

今天做个简单的探讨。

原理

识别模拟器的原理,其实就是找出模拟器真机的差别,但是这些差别体现在哪呢,比如运营商、手机卡、蓝牙、各种传感器等等。

但是现在的模拟器也是越来越厉害了,可以模拟不同品牌不同型号不同版本的手机,而且有蓝牙、可以打电话。

是不是很头疼,一不小心就会误判了,所以现在市面上有一种方案也是根据模拟器和真机差别的次数来做一个容错机制,比如模拟器和真机超过3个差别,就判为模拟器。

但是实际上,有的老版本手机甚至还不如模拟器先进…所以容错机制中还可以加上对用户的区别对待,个别用户不检测等等。

禁止模拟器安装apk

模拟器一般的cpu架构都是x86的,我们可以在build.gradle中去掉对x86的支持。

        ndk {// 设置支持的SO库架构abiFilters 'armeabi-v7a', 'arm64-v8a'}

当然也有一些手机可能也是x86的,这就误判了,因为目前来说还没有比较完善的解决方案,所以前面所说的容错机制就比较重要了。

仅仅是去掉x86的支持还是不够的,因为有的模拟器也不是x86架构,所以还是要进一步找出模拟器和真机的区别。

当然也可以不禁止,识别出来就行。

代码识别

这里还是原理中提到的,判断有没有蓝牙、序列号、传感器、cpu架构等等多重判断。

这里推荐一个库:CacheEmulatorChecker

调用也比较简单,一行代码即可:

       val emulator = EmulatorDetectUtil.isEmulator(this)if (emulator) {ToastUtils.show(this, "检测到您的设备可能为模拟器", Toast.LENGTH_LONG)}

验证

禁止加代码识别的方案,目前验证过的模拟器:

  • 逍遥模拟器
  • 蓝叠模拟器
  • 夜神模拟器
  • 天天模拟器
  • 腾讯手游助手
  • 雷电模拟器
  • MUMU模拟器
  • 鲁大师手机模拟大师

以及各种主流手机品牌的主流机型,测试ok

最后

目前来说,还是没有完善且公开的解决方案,所以为避免误判,还是要根据自己的业务做相关的容错机制,比如给user加个是否要判断的字段,要的情况下再判断,否则放过。

看到最后,如果你有更好的方法,欢迎讨论。

Android识别模拟器,判断是模拟器还是真机相关推荐

  1. 开发中,模拟器网络请求成功,真机网络请求失败

    这个问题主要原因是我们后台开发人员,给我们技术部配置了hosts文件,我们通过域名来访问服务器,所以只能模拟器可以请求成功,真机失败 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作 ...

  2. Android获取手机设备信息并区分真机与模拟器

    有些时候我们不想App在模拟器上被别人使用,所以我们禁止在模拟器上使用App 判断是否为真机: 根据以下四图,我们可以对真机与模拟器来做一个简单区分: 如果Serial码为unkonwn或者andro ...

  3. Android开发,关于模拟器通知显示正常,真机测试真机通知无效问题

    最近,小白弄一个通知,模拟器上通知显示还是正常的,但真机测试就出现通知不显示的问题,并且也不报错,嘿,可给它牛坏了. 百度半天也没解决问题,然后就在真机的应用权限设置里发现,原来通知权限是默认关闭的, ...

  4. android编程用真机模拟,android编程的广播,模拟器可接受,但真机不可接受。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.动态注册 //接受广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.ad ...

  5. APP在电脑模拟器上完美运行,真机运行时闪退现象记录

    由于疫情原因以及公司要求 在家已经呆了快两个月了,作为大四快毕业的实习生来说,这两个月肯定没有静下心来好好学习...哈哈哈 但是要准备写毕业论文了,所以准备把以前写过的程序当做毕业设计,于是时隔七周重 ...

  6. eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下

    网络很重要的一个环节就是大量的实践操作,通过教程学习知识点,再用实践来验证这些知识学会了没有,如此反复.这样的问题也随之而来,初学网络连概念都刚刚建立,怎么才能接触到网络设备:交换机.路由器.防火墙等 ...

  7. Android进阶之路 - 使用Stetho查看真机数据库

    起因:维护老项目,需查看本地数据库数据,起初使用了DDMS调试,但使用时发现真机需Root.而我又不想使用模拟器,在此基础下我发现了Stetho三方框架能实现我的需求,故在使用真实有效的基础下总结此篇 ...

  8. android 远程调试工具,【教程】搭配Android studio,如何实现app远程真机debug...

    用了很久的模拟器,今天给大家分享一个不用模拟器,在没有手机的情况下,如何实现真机debug的教程,第一次发文章,非喜勿喷,望支持下! 废话少说,先睹为快.在不用数据线连接手机的情况下,先来个打断点截图 ...

  9. 【错误记录】eclipse,android,logcat日志无法打印,真机调试

    eclipse调试android程序,当使用真机时system.out,log.i等日志在logcat里面打印不出来(但能打印出来其他一堆系统消息),而使用模拟机一切正常,怎样才能在真机调试时也能在l ...

  10. Centos 7 怎么都连不上手机阿阿阿阿Android Studio 怎么都检测不到真机啊还有关于git本地提交就缺少文件啊啊啊啊

    简直了!!! Android Studio 3.0 异常退出之后,就怎么都检测不到真机了,好长好长时间解决不了,蓦然发现centos 7 也连不上手机了!其可修 原来是数据线里面的数据线怀掉了 只能显 ...

最新文章

  1. 路由协议OSPF知识点汇总
  2. c++和c语言中的函数相互调用的问题
  3. 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )
  4. AI入门:不用任何公式把Embedding讲清楚
  5. 错误MSB4018 “ResolvePackageAssets”任务意外失败的解决方法
  6. 海外 谷歌 app api_Google App Engine Java功能和命名空间API
  7. 数据结构学习笔记(转载)
  8. 蓝桥杯 C语言 试题 基础练习 FJ的字符串
  9. 客制化键盘各部件介绍(客制化入门必看)
  10. 《Linux驱动:DM9000网卡驱动分析》
  11. 【Qt】用setValue()设置UI控件内的内容,如何避免valuechange()被触发
  12. HDOJ-----5773The All-purpose Zero(LIS)
  13. Python Socket联机自动匹配双人五子棋(含登录注册系统与界面,数据库连接,可作结课作业,可用于学习)
  14. IPFS DHT专题:去中心化搜索的架构演进
  15. 中国 Google 面试 7 轮,结果...
  16. 只需这篇文章java线程池原理便懂了!♥♥
  17. Bitvise——服务器与本地交互软件(适合大文件传输)
  18. Java中HashMap底层实现原理
  19. 算法笔记-CDQ分治
  20. Unity中的异步编程【1】—— Unity与async 、 await

热门文章

  1. android电视盒子设备名字,Android电视TV盒子开发——常用ADB命令-Go语言中文社区...
  2. 运维面试题之系统运维
  3. 应用案例 | 2009 款长安福特马自达 3 车行驶中发动机突然熄火
  4. Permute for Mac破解版永久激活教程
  5. 【Java开发】Spring Cloud 05 :远程服务调用Openfeign 替代 WebClient
  6. MATLAB算法实战应用案例精讲-【智能优化算法】海洋捕食者算法(MPA) (附MATLAB和python代码实现)
  7. 一台电脑接两个显示器,双屏显示 安装双显示器 电脑后面有两个VGA接口 干什么用的 一台主机两个显示 器怎么连接 HDMI转VGA转换器
  8. arduino小车电机不转_新一代信息技术Arduino作品要求
  9. AutoJs4.4.1免费版快速接通vscode进行调试脚本
  10. 计算机应用2016知识点测试答案,2016计算机应用基础附答案.doc