【问题标题】:Run Android app Only on Physical Device not Emulator仅在物理设备而非模拟器上运行 Android 应用程序
【发布时间】:2017-07-29 21:56:50
【问题描述】:

如何让我的应用仅在物理 Android 设备上运行,而不是在模拟器上运行。

当应用启动时,我想检查设备是物理设备还是模拟器。如果是模拟器,我希望我的应用停止。

我该怎么做?

【问题讨论】:

  • 关闭模拟器
  • 您是在问如何让应用在启动时无法在模拟器中运行,或者如何让其他人无法在模拟器中运行您的应用?
  • ya.. 我想阻止其他人在模拟器上运行应用程序

标签: android android-emulator adb emulation


【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多