在 android 模拟器中检测游戏 运行
Detect if game running in android emulator
有什么方法可以知道游戏是 运行 在模拟器应用程序中还是在真实设备中?
VirtualXposed
等一些应用程序是 android 设备的虚拟模拟器。此类应用程序允许用户使用不同的标识在其设备上多次安装游戏/应用程序。
我想知道有什么方法可以识别我的游戏/应用程序是 运行 在模拟器中还是在 unity3d 中的物理设备?
类似于:
if(isemulator)
{
dosomething();
}
也许您可以查找一些特定于模拟器的系统信息 (Unity Docs SystemInfo),例如。 SystemInfo.deviceModel
这并不容易,因为那里有很多模拟器。 this post 的回答说你可以使用 Build.FINGERPRINT.contains("generic")
来做到这一点。
您可以使用 AndroidJavaClass
class 将 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 代码进行回调。
有什么方法可以知道游戏是 运行 在模拟器应用程序中还是在真实设备中?
VirtualXposed
等一些应用程序是 android 设备的虚拟模拟器。此类应用程序允许用户使用不同的标识在其设备上多次安装游戏/应用程序。
我想知道有什么方法可以识别我的游戏/应用程序是 运行 在模拟器中还是在 unity3d 中的物理设备?
类似于:
if(isemulator)
{
dosomething();
}
也许您可以查找一些特定于模拟器的系统信息 (Unity Docs SystemInfo),例如。 SystemInfo.deviceModel
这并不容易,因为那里有很多模拟器。 this post 的回答说你可以使用 Build.FINGERPRINT.contains("generic")
来做到这一点。
您可以使用 AndroidJavaClass
class 将 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 代码进行回调。