andriod的app开发中如何识别是否在模拟器中运行?
网友回复
思路
区分模拟器的基本思路就是根据Android的Build类中一些与硬件相关联的常量及系统参数,在真机与模拟器中值的不同,从而区分模拟器。 但是实际使用中,现在的模拟器往往都会支持修改这当中的一些值,导致只是用静态变量及系统参数的方法准确率不高,因此还需要辅助其他方法(例如:用户的行为、检查传感器、基带信息、进程信息等),再综合判断: 硬件名称检查
硬件名称(ro.hardware),是安卓系统变量文件build.prop中的一个参数,用于描述该硬件的名称,而部分模拟器的某些版本(早期版本),该值的内容是有特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值是可以在模拟器中进行修改的,因此该因素判断的准确率一般。 发布渠道检查
设备发布渠道信息(ro.build.flavor),是安卓系统变量文件build.prop中的一个参数,用于描述该设备ISO发布时的渠道,而在部分模拟器中,该值的内容是有特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值在某些模拟器中是不固定或可以根据系统镜像进行修改的,因此该因素判断的准确率一般。 设备型号检查
设备型号(ro.product.model),是安卓系统变量文件build.prop中的一个参数,用于描述该设备型号,部分模拟器中该值是存在特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值在某些模拟器中是不固定或可以根据系统镜像进行修改的,因此该因素判断的准确率一般。 硬件制造商检查
硬件制造商(ro.product.manufacturer),是安卓系统变量文件build.prop中的一个参数,用于描述该设备的制造商,部分模拟器中该值是存在特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值在某些模拟器中是不固定或可以根据系统镜像进行修改的,因此该因素判断的准确率一般。 主板名称检查
主板名称(ro.product.board),是安卓系统变量文件build.prop中的一个参数,用于描述该设备的主板名称信息,部分模拟器中该值是存在特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值在某些模拟器中是不固定或可以根据系统镜像进行修改的,因此该因素判断的准确率一般。 主板平台检查
主板平台(ro.product.platform),是安卓系统变量文件build.prop中的一个参数,用于描述该设备的主板平台信息,部分模拟器中该值是存在特定值的。 因此该因素可以作为一个判断模拟器的因素,具体值在下方代码中已经列出,但是由于这个值在某些模拟器中是不固定或可以根据系统镜像进行修改的,因此该因素判断的准确率一般。 基带信息检查
基带信息(gsm.version.baseband),是安卓系统变量文件build.prop中的一个参数,用于描述该设备的基带信息,部分模拟器中该值是存在特定值的(AS自带模拟器),由于该值是在基带芯片中写入的,因而大部门市面主流的模拟器,该值都是无法获取的。 因此该因素可以作为一个判断模拟器的因素,且该值无法获取时,大概率是模拟器,具体值在下方代码中已经列出,该值获取失败时,是模拟器的可能性非常大。 传感器数量检查
当前(2020年初),大部分市面上销售的手机都具有很多传感器(例如陀螺仪、温度传感器、光线传感器等),我个人的小米9 Pro 5G手机,传感器检测出的数量多达42个,而模拟器中,该数量仅为个位数。因此该因素可以作为一个判断模拟器的因素,且该值数量较少(<7)时,大概率是模拟器,判断逻辑在下方已经列出。 第三方应用数量检查
根据我们日常的手机使用经验可以得知,正常的用户一般都会下载安装多个应用软件(微信、支付宝、微博、抖音、视频软件、游戏软件等),而模拟器中的软件数量一般较少。因此该因素可以作为一个判断模拟器的因素,且该值数量较少(<5)时,大概率是模拟器,但该因素不绝对正确,可能一个用户手...
点击查看剩余70%