我正在开发一个应用程序,对于该应用程序,如果在虚拟设备(例如Genymotion,Bluestacks和其他类似的模拟器)上安装了该应用程序,则不授予其访问该应用程序功能的作用非常重要
我尝试使用很少的标识符,例如设备ID,传感器,指纹等。但是,当与Bluestacks tweaker结合使用时,所有这些仿真器都将失败。 BS Tweak等将物理设备级别的值分配给这些标识符,即使在模拟器上也是如此。
因此,对于解决此问题的任何帮助将不胜感激。
答案 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以供参考。