如何检测是否在物理设备与虚拟设备/模拟器上安装了应用程序?

时间:2020-02-25 10:47:13

标签: android emulation genymotion bluestacks

我正在开发一个应用程序,对于该应用程序,如果在虚拟设备(例如Genymotion,Bluestacks和其他类似的模拟器)上安装了该应用程序,则不授予其访问该应用程序功能的作用非常重要

我尝试使用很少的标识符,例如设备ID,传感器,指纹等。但是,当与Bluestacks tweaker结合使用时,所有这些仿真器都将失败。 BS Tweak等将物理设备级别的值分配给这些标识符,即使在模拟器上也是如此。

因此,对于解决此问题的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

是的,您会发现您的应用程序在真实设备或虚拟设备或仿真器中运行。为此,您必须使用fingerPrint。通过Model,您还可以获取实际的虚拟设备名称。这是示例代码,您可以检测到它是否是模拟器。

N.B:fingerPrint不仅为虚拟设备返回UNKNOWN,而且还返回GENERIC

public static boolean isEmulator() {
        return Build.FINGERPRINT.startsWith("generic")
                || Build.FINGERPRINT.startsWith("unknown")
                || Build.MODEL.contains("google_sdk")
                || Build.MODEL.contains("Emulator")
                || Build.MODEL.contains("Android SDK built for x86")
                || Build.MANUFACTURER.contains("Genymotion")
                || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
                || "google_sdk".equals(Build.PRODUCT);
    }

答案 1 :(得分:0)

要补充其他答案:请注意,用户可能可以打开应用程序的包装并删除这种保护。另请参阅this question以供参考。

相关问题