检测游戏是否在android模拟器中运行

时间:2018-08-16 15:44:34

标签: c# android unity3d emulation virtual

有没有办法知道游戏是在模拟器应用程序中还是在真实设备中运行?

诸如VirtualXposed之类的某些应用程序是android设备的虚拟模拟器。此类应用程序允许用户使用不同的标识多次在其设备上安装游戏/应用程序。

我想知道有什么方法可以识别我的游戏/应用程序是在模拟器中还是在unity3d中的物理设备上运行的?

类似:

if(isemulator)
   {
       dosomething();
   }

2 个答案:

答案 0 :(得分:5)

这并不容易,因为那里有许多仿真器。 this帖子中的答案说,您可以使用Build.FINGERPRINT.contains("generic")来做到这一点。

您可以使用AndroidJavaClass类将Java代码移植到Unity中的C#,而无需构建Java插件。下面是C#中的移植版本:

public bool IsEmulator()
{
    AndroidJavaClass osBuild;
    osBuild = new AndroidJavaClass("android.os.Build");
    string fingerPrint = osBuild.GetStatic<string>("FINGERPRINT");
    return fingerPrint.Contains("generic");
}

为确保涵盖大多数仿真器,请使用android-emulator-detector插件。这个插件似乎经过了严格的测试,可以检测大多数模拟器。您可以使用AndroidJavaClass与它进行通信,并可以使用UnityPlayer.UnitySendMessage来回调C#中的Unity代码。

答案 1 :(得分:0)

也许您可以查找一些特定于模拟器的SystemInfos(Unity Docs SystemInfo),例如。 SystemInfo.deviceModel