下面是流传的比较广的代码
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,无论手机还是模拟器。。。