模拟器是否能够代替真机的兼容测试 | 您所在的位置:网站首页 › 模拟器模仿真机下载 › 模拟器是否能够代替真机的兼容测试 |
平时测试过程中,经常有组内同学们问,使用模拟器测试完之后,是否可以代替真机的兼容测试了。 先来看看模拟器和真机的直观区别: 多点触摸(比如两个手指放大文本字体大小)网络通话(没有真实的呼入和呼出)摄像(无法调起摄像,无法验证拍照类功能人脸识别)USB连接WiFi(没有不同的网络环境)各种网络制式蓝牙音频输入/捕捉另外: Android具有的一些特点 Android模拟器用的是原生标准的Android系统。市面上的真机定制化非常多,比如国内小米的MIUI,魅族的Flyme等等,而模拟器都是Android的原生系统,即相当于市面上的Nexus和Pixel手机的系统,因此国内使用原生Android系统手机的用户非常少见Android模拟器上安装的apk签名是debug模式的。发布应用到市场上要使用开发者正式的签名。Android模拟器上用px像素可以正常显示,真机上必须用dpi让系统自动识别才能达到预期效果。所以真机上有可能布局变得面目全非,和模拟器上不一致。Android模拟器不能确定电池电量水平和充电状态。Android模拟器不能确定SD卡的插入/弹出。Android模拟器都是模拟的硬件。所以在硬件上基本不会出现兼容性问题,但是市场上的真机大多数都是采用不同的cpu,不同的显示屏等。Android模拟器不会被刷机,但真实的Android设备会存在刷机。模拟器上发布程序后会自己启动程序弹出界面,真机上通过电脑安装后则不会弹出来。Android模拟器不支持呼叫和接听实际来电。只能通过控制台模拟电话呼入和呼出。iOS具有的一些特点 iOS模拟器和真机的分辨率不同。故和真机的显示效果不一样。iOS模拟器没有硬件限制。比如内存,所以会有应用出现在模拟器上很快,真机很慢的情况,原因是真机的内存被用完了模拟器不会被越狱,真机会被越狱,越狱后的真机会有兼容性问题iOS有些framework只支持模拟器,不支持真机。综合来讲,模拟器只是实现了真机的大部分功能,但绝对不能代替真机测试,任何应用在上线前都应该在实体机上进行验收测试。尤其是只有真机才能反应出最真实的性能测试情况,有没有发热,严重流量占用,耗电量消耗等等。另外模拟器的性能和调试效率,相比真机,会低很多,测试效率比较低。
如果希望有一些反欺诈监控,需要获取设备返回的一些信息来鉴别设备的真伪,判断是否模拟器,也有一些方法。 1、native方式 通过代码读取设备中的配置和硬件相关信息。 a) diskstats,获取闪存的分区状态信息 int fd = open(“/proc/diskstats”, O_RDONLY); bytes = read(fd,buf, bytes); 区别:真机下都有mmcblk0分区,但是模拟器没有分区信息。 b) socket,ioctl,读取mac地址 sockfd =socket(AF_INET, SOCK_DGRAM, 0); ioctl(sockfd,SIOCGIFCONF, (char*)&ifc); ioctl(sockfd,SIOCGIFADDR, &ifr[i]) ioctl(sockfd,SIOCGIFHWADDR, (char*)&ifr[i]) 区别:真机可以获取wlan0的ip和mac地址,模拟器只能获取eth0的ip和mac地址; c) 有用的prop信息 __system_property_get(key,buf); 区别: 模拟器没有ro.boot.serialno和ro.serialno属性,真机中为机器序列号。 模拟器ro.hardware属性为goldfish,真机为各自的型号。 d) cpu信息 int fd = open(“/proc/cpuinfo”, O_RDONLY); bytes = read(fd,buf, bytes); 区别:模拟器中cpuinfo的硬件为Goldfish。 e) drivers int fd = open(“/proc/tty/drivers”, O_RDONLY); 区别:模拟器中包含goldfish的驱动 f) 模拟器特有文件 int fd = open(“/dev/socket/qemud”, O_RDONLY); int fd = open(“/dev/qemu_pipe”, O_RDONLY); 区别:模拟器专有的文件,真机中没有。 二,通过Java层的代码获取 a) IMEI和IMSI IMEI移动设备国际身份码。 IMSI IMSI国际移动用户识别码,储存在SIM卡中 finalTelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); String imei =tm.getDeviceId(); String imsi =tm.getSubscriberId(); 设备1:354273055927169 / null(无卡) 设备2:862966024243759 / 460011040618938 模拟器:000000000000000 / 310260000000000 b) Serial序列号 String serial =android.os.Build.SERIAL; 设备1:4df78680771b117b 设备2:OBAI5HDQZPDIRCQG 模拟器:unknown c) android_id String android_id= Secure.getString(getContentResolver(), Secure.ANDROID_ID); 设备和模拟器都有,16位。 d) Mac地址 WifiManagerwifimanage=(WifiManager)getSystemService(Context.WIFI_SERVICE); WifiInfo wifiinfo=wifimanage.getConnectionInfo(); 设备1:88:32:9b:1e:49:20 设备2:f8:a4:5f:fd:56:17 模拟器:null |
CopyRight 2018-2019 实验室设备网 版权所有 |