检测游戏是不是在安卓模拟器中运行
Posted
技术标签:
【中文标题】检测游戏是不是在安卓模拟器中运行【英文标题】:Detect if game running in android emulator检测游戏是否在安卓模拟器中运行 【发布时间】:2019-01-23 15:20:24 【问题描述】:有什么方法可以知道游戏是在模拟器应用程序还是在真实设备中运行?
像VirtualXposed
这样的一些应用程序是安卓设备的虚拟模拟器。此类应用程序允许用户在其设备上多次安装具有不同标识的游戏/应用程序。
我想知道有什么方法可以识别我的游戏/应用程序是在模拟器中运行还是在 unity3d 中的物理设备中运行?
类似:
if(isemulator)
dosomething();
【问题讨论】:
不确定,似乎其他人在统一答案中心也有相同的问题(但没有答案)。我发现了如何检测 .apk 是否在模拟器上运行:***.com/questions/2799097/… 我想要一个简单的解决方案@Katianie 可能不存在“简单”的解决方案。主要是因为应用程序不应该知道或关心它是否在模拟器上。 @iman_sh(请客气)这是我能找到的最简单的解决方案。你问的不是典型的。为什么你需要知道它是一个模拟器? 【参考方案1】:这并不容易,因为那里有很多模拟器。 this 帖子的答案说您可以使用 Build.FINGERPRINT.contains("generic")
来做到这一点。
您可以在 Unity 中使用 androidJavaClass
类将 Java 代码移植到 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 代码进行回调。
【讨论】:
【参考方案2】:也许您可以查找一些特定于模拟器的 SystemInfos (Unity Docs SystemInfo),例如。 SystemInfo.deviceModel
【讨论】:
以上是关于检测游戏是不是在安卓模拟器中运行的主要内容,如果未能解决你的问题,请参考以下文章