开发者社区> 问答> 正文

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


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

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



感觉不太对诶      

展开
收起
kun坤 2020-06-06 17:14:45 1176 0
1 条回答
写回答
取消 提交回答
  • 你判断这个干嘛?######他是想通过读取cpu的信息从而判断是否是安卓模拟器######你的方法并没有用,result.contains("arm")、result.contains("intel")、result.contains("amd")都是false,无论手机还是模拟器。。。

    2020-06-06 17:14:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载