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

ima*_*_sh 2 c# virtual android emulation unity-game-engine

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

一些应用程序,如VirtualXposedAndroid设备的虚拟模拟器.此类应用程序允许用户在其设备上多次安装具有不同标识的游戏/应用程序.

我想知道有没有办法识别我的游戏/应用程序在Unity3d中的模拟器或物理设备中运行?

就像是 :

if(isemulator)
   {
       dosomething();
   }
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 6

这很不容易,因为那里有很多仿真器.这篇文章的答案说你可以用Build.FINGERPRINT.contains("generic")它来做.

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

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

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