安卓如何判断设备是否为模拟器

您的好友 发布于 2015/04/15 20:15
阅读 5K+
收藏 2


下面是流传的比较广的代码

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"));
 }



感觉不太对诶      

加载中
0
黑狗
黑狗
你判断这个干嘛?
小爷我不嘚瑟
他是想通过读取cpu的信息从而判断是否是安卓模拟器
0
下玄月
你的方法并没有用,result.contains("arm")、result.contains("intel")、result.contains("amd")都是false,无论手机还是模拟器。。。
返回顶部
顶部