首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检测Android应用程序何时在模拟器中运行?

如何检测Android应用程序何时在模拟器中运行?
EN

Stack Overflow用户
提问于 2010-05-10 04:40:29
回答 41查看 147.4K关注 0票数 344

我希望我的代码在模拟器上运行时与在设备上运行时略有不同。(,例如,使用10.0.2.2而不是公共URL自动针对开发服务器运行。)检测Android应用程序何时在模拟器中运行的最佳方法是什么?

EN

回答 41

Stack Overflow用户

发布于 2014-02-02 07:45:08

这个解决方案怎么样(here提供了SystemProperties的类实现):

代码语言:javascript
复制
private var sIsProbablyRunningOnEmulator: Boolean? = null

fun isProbablyRunningOnEmulator(): Boolean {
    var result = sIsProbablyRunningOnEmulator
    if (result != null)
        return result
    // Android SDK emulator
    result = (Build.FINGERPRINT.startsWith("google/sdk_gphone_")
            && Build.FINGERPRINT.endsWith(":user/release-keys")
            && Build.MANUFACTURER == "Google" && Build.PRODUCT.startsWith("sdk_gphone_") && Build.BRAND == "google"
            && Build.MODEL.startsWith("sdk_gphone_"))
            //
            || 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")
            //bluestacks
            || "QC_Reference_Phone" == Build.BOARD && !"Xiaomi".equals(Build.MANUFACTURER, ignoreCase = true) //bluestacks
            || Build.MANUFACTURER.contains("Genymotion")
            || Build.HOST=="Build2" //MSI App Player
            || Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")
            || Build.PRODUCT == "google_sdk"
            // another Android SDK emulator check
            || SystemProperties.getProp("ro.kernel.qemu") == "1"
    sIsProbablyRunningOnEmulator = result
    return result
}

请注意,一些模拟器伪造真实设备的确切规格,因此可能无法检测到它。我已经添加了我能添加的东西,但我不认为有100%的方法来检测它是否真的是一个仿真器。

下面是您可以在APK中创建的一小段代码,用于显示有关它的各种内容,因此您可以添加自己的规则:

代码语言:javascript
复制
        textView.text = "FINGERPRINT:${Build.FINGERPRINT}\n" +
                "MODEL:${Build.MODEL}\n" +
                "MANUFACTURER:${Build.MANUFACTURER}\n" +
                "BRAND:${Build.BRAND}\n" +
                "DEVICE:${Build.DEVICE}\n" +
                "BOARD:${Build.BOARD}\n" +
                "HOST:${Build.HOST}\n" +
                "PRODUCT:${Build.PRODUCT}\n"
票数 176
EN

Stack Overflow用户

发布于 2011-05-03 12:01:25

一个常见的sems是Build.FINGERPRINT.contains("generic")

票数 120
EN

Stack Overflow用户

发布于 2010-05-15 21:06:42

Android id对我不起作用,我现在使用的是:

代码语言:javascript
复制
"google_sdk".equals( Build.PRODUCT );
票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2799097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档