Android模拟器的判定

Android模拟器的判定

开发当中,有时需要判断当前设备是否为模拟器。一般判断的方法是通过匹配Build.MODEL, Build.MANUFACTURER, 属性”ro.hardware”的值。
其实查看Build的源码可以发现,其暴露出来的MODEL/MANUFACTURER等属性也是调用android.os.SystemProperties#get(java.lang.String, java.lang.String)方法,读取相应的值
MODEL为ro.product.model
MANUFACTURE为ro.product.manufacturer

由于工作需要,对比了几种常见的模拟器及其特征值,这里简单总结一下。

Android Google Simuator

  • Build.MODEL - Android SDK built for x86
  • Build.MANUFACTURER - unknown
  • ro.hardware - goldfish

这里使用”ro.hardware”比较合适,它的稳定性看起来更高一些

Genymotion

  • Build.MODEL - Samsung Galaxy S5 - 4.4.4 - API 19 - 1080x1920
  • Build.MANUFACTURER - Genymotion
  • ro.hardware - vbox86

这里我是用的是MANUFACTURER,MODEL和你选择的模拟机型相关,而ro.hardware就是使用的vm的标识(VirtualBox),有可能会因为平台不一样而变化

BlueStacks

  • Build.MODEL - GT-N7100
  • Build.MANUFACTURER - sumsung
  • ro.hardware - smdk4x12

这个相比就不厚道了,完全模拟三星的N7100,这几个字段无法判定

ro.hardware的获取方法

    String roHardware = getSystemPropertie("ro.hardware");

    /**
     * 获取系统属性值
     */
    public static String getSystemPropertie(String propertyName) {
        String value = "";
        try {
            Class clazz = Class.forName("android.os.SystemProperties");
            Class[] paramTypes = new Class[1];
            paramTypes[0] = String.class;
            Method method = clazz.getMethod("get", paramTypes);

            Object object = clazz.newInstance();
            Object[] propertyNames = new Object[1];
            propertyNames[0] = propertyName;
            value = (String) method.invoke(object, propertyNames);
        } catch (Exception e) {
        }

        return value;
    }

其它模拟器

精力有限,还有一些其它的模拟器没有研究,列一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值