仅在物理设备而非模拟器上运行 Android 应用程序
Posted
技术标签:
【中文标题】仅在物理设备而非模拟器上运行 Android 应用程序【英文标题】:Run Android app Only on Physical Device not Emulator 【发布时间】:2017-07-29 21:56:50 【问题描述】:如何让我的应用仅在物理 android 设备上运行,而不是在模拟器上运行。
当应用启动时,我想检查设备是物理设备还是模拟器。如果是模拟器,我希望我的应用停止。
我该怎么做?
【问题讨论】:
关闭模拟器 您是在问如何让应用在启动时无法在模拟器中运行,或者如何让其他人无法在模拟器中运行您的应用? ya.. 我想阻止其他人在模拟器上运行应用程序 【参考方案1】:在您的启动活动的onCreate()
方法中,您可以检查设备是否在模拟器上运行,如果是,只需调用finish()
。要检查您是否在模拟器上运行,您可以使用类似以下代码(取自this answer):
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);
您可以在网上找到许多其他用于检测模拟器环境的建议。我不知道有什么绝对万无一失的,但上面的内容非常强大。
【讨论】:
【参考方案2】:你可以试试下面的方法
boolean isEmulator()
return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
|| Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.HARDWARE.contains("goldfish")
|| Build.HARDWARE.contains("ranchu")
|| Build.HARDWARE.equals("vbox86")
|| Build.HARDWARE.toLowerCase().contains("nox")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")
|| Build.MODEL.toLowerCase().contains("droid4x")
|| Build.MANUFACTURER.contains("Genymotion")
|| Build.PRODUCT.contains("sdk_google")
|| Build.PRODUCT.contains("google_sdk")
|| Build.PRODUCT.contains("sdk")
|| Build.PRODUCT.contains("sdk_x86")
|| Build.PRODUCT.contains("vbox86p")
|| Build.PRODUCT.contains("emulator")
|| Build.PRODUCT.contains("simulator")
|| Build.PRODUCT.toLowerCase().contains("nox")
|| Build.BOARD.toLowerCase().contains("nox")
|| Build.BOOTLOADER.toLowerCase().contains("nox")
|| Build.SERIAL.toLowerCase().contains("nox");
它是 Flutter 项目(设备信息插件)中使用的代码的更新。检查它here
【讨论】:
以上是关于仅在物理设备而非模拟器上运行 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 应用程序在 Android 模拟器上运行,但不在物理设备上(OnePlus 7T)
应用程序可以在模拟器上完美运行,但不能在物理设备上[在iOS 13.3.1上]
Flutter 应用程序在 android studio 模拟器上完美运行,但不会超过物理设备上的加载屏幕
模拟器或物理设备上的“未安装应用程序”android? [复制]