今天做个简单的探讨。
原理
识别模拟器的原理,其实就是找出模拟器
和真机
的差别,但是这些差别体现在哪呢,比如运营商、手机卡、蓝牙、各种传感器等等。
但是现在的模拟器也是越来越厉害了,可以模拟不同品牌
的不同型号
的不同版本
的手机,而且有蓝牙、可以打电话。
是不是很头疼,一不小心就会误判了,所以现在市面上有一种方案也是根据模拟器和真机差别的次数来做一个容错机制
,比如模拟器和真机超过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)
}
验证
禁止加代码识别的方案,目前验证过的模拟器:
-
逍遥模拟器
-
蓝叠模拟器
-
夜神模拟器
-
天天模拟器
-
腾讯手游助手
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618165277)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!