Как определить, установлено ли приложение на физическом устройстве против виртуального устройства / эмулятора? - PullRequest
0 голосов
/ 25 февраля 2020

Я разрабатываю приложение, для которого действительно важно, чтобы оно не давало доступа к функциям приложения, если приложение установлено на виртуальном устройстве, например, Genymotion, Bluestacks и других подобных эмуляторах

Я пытался использовать несколько идентификаторов такие как идентификатор устройства, датчики, отпечатки пальцев и т. д. c. Но все они терпят неудачу с этими эмуляторами, когда клюют с твикером Bluestacks, например. BS Tweak et c, который присваивает значения уровня физического устройства этим идентификаторам даже в эмуляторе.

Так что любая помощь в решении этой проблемы будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

В дополнение к другим ответам: обратите внимание, что пользователь может распаковать приложение и снять этот вид защиты. Также проверьте этот вопрос для справки.

0 голосов
/ 25 февраля 2020

Да, вы можете обнаружить, что ваше приложение работает на реальном устройстве, виртуальном устройстве или эмуляторе. И для этого вы должны использовать fingerPrint. С помощью Model вы также можете получить фактическое имя виртуального устройства. Вот пример кода, и вы можете обнаружить, что это эмулятор или нет.

Примечание: fingerPrint не только возвращает UNKNOWN для виртуального устройства, но и возвращает GENERIC

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);
    }
...