Android app如何禁止运行在模拟器中

禁止 Android 应用程序在模拟器上运行涉及到在运行时检测应用是否在模拟器上运行,并根据情况做出相应的处理。以下是一种方法,通过判断设备的某些特征来检测模拟器:

  1. 创建一个用于检测模拟器的方法:
java 复制代码
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);
}

这个方法检查了多个系统属性,这些系统属性是模拟器的常见标识。

  1. 在你的 Activity 或 Application 类中加入运行时检测:
java 复制代码
if (isEmulator()) {
    // 弹出对话框或者采用其他方式通知用户不应该在模拟器上运行
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("This application cannot be run on an emulator.")
           .setCancelable(false)
           .setPositiveButton("OK", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // 结束应用
                   finish();
               }
           });
    AlertDialog alert = builder.create();
    alert.show();
} else {
    // 正常运行你的活动
}

isEmulator() 检测返回 true 的情况下,弹出对话框并结束应用程序。

请注意,没有完美的方法来检测所有模拟器,因为模拟器们的开发者可能会模仿真实设备的属性。由于模拟器可以伪造这些值,因此某些精心设计的模拟器可能会通过这些检测。此外,这些检测方法可能会随着 Android 系统和模拟器技术的更新而需要相应的更新。

还要考虑到,禁止在模拟器上运行可能会影响那些合法使用模拟器进行测试和开发工作的用户。因此,在实现此类限制之前,请确保你对此有明确的业务理由和需求。

相关推荐
法欧特斯卡雷特15 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·开源·全栈
摇滚侠15 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记
Zeaon16 小时前
别再手写筛选栏了:一个可组合的 Flutter 选择组件(5 入口 × 7 委托)
android·flutter
Michaelwubo16 小时前
mysql8 主从 HA切换
android·adb
墨狂之逸才16 小时前
Android 工业手持机蓝牙扫描失败:为什么同时需要蓝牙和定位权限
android
Android打工仔17 小时前
Kotlin 协程源码解析(七)`delay()` 到底是如何在 `Dispatchers.Main` 上恢复的?
android·kotlin
律宏阔17 小时前
Android 红外功能实现与红外协议开发笔记:ConsumerIrManager、NEC、PWM、曼彻斯特编码
android
mmsx18 小时前
MapLibre 统一图层模型:sealed class + 声明式图层 + XML 持久化
android·源码·地图·maplibre
YUJIANYUE18 小时前
查立得万用查分安卓版(web环境+查询系统免安装单文件一键运行包)
android·前端
天空之城--19 小时前
Android Launcher 性能优化完全指南:从启动到滑动,构建极致流畅的桌面体验
android·性能优化