下面是流传的比较广的代码
public static boolean isEmulator(Context context){ try{ TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = tm.getDeviceId(); if (imei != null && imei.equals("000000000000000")){ return true; } return (Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk")); }catch (Exception ioe) { } return false; }
现在很多模拟器 机型 imei mac地址 imsi都可以任意设置 所以这个已经识别不了
我想到可以通过读取 /proc/cpuinfo文件里面的cpu信息来识别是否为虚拟机
我试了一下 模拟器获取到的cpu信息即为主机的cpu信息 都是 intel i5 这样的 真机获取到的都是 arm v7 这样的
所以我写了下面这样的
public static boolean isEmulator(Context context){ String result=""; try{ String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; ProcessBuilder cmd = new ProcessBuilder(args); Process process = cmd.start(); StringBuffer sb = new StringBuffer(); String readLine=""; BufferedReader responseReader = new BufferedReader(new InputStreamReader(process.getInputStream(),"utf-8")); while ((readLine = responseReader.readLine()) != null) { sb.append(readLine); } responseReader.close(); result=sb.toString().toLowerCase(); } catch(IOException ex){ } return (!result.contains("arm")) || (result.contains("intel")) || (result.contains("amd")); }
你判断这个干嘛?######他是想通过读取cpu的信息从而判断是否是安卓模拟器######你的方法并没有用,result.contains("arm")、result.contains("intel")、result.contains("amd")都是false,无论手机还是模拟器。。。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。