今天收到测试提的一个问题,就是需要做到“移动应用不能在模拟器中运行”。

度娘了一圈,已实现,现做记录:

本次记录主要参考:

https://blog.csdn.net/wei_zexu/article/details/109535682?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-3&spm=1001.2101.3001.4242

都说“夜神”模拟器功能强大,于是我也装了一个;将打包好的apk拖进去,的确是运行了;

现在直接上代码:

public  class CheckSimulator {private static final String[] PKG_NAMES = {"com.mumu.launcher", "com.ami.duosupdater.ui", "com.ami.launchmetro", "com.ami.syncduosservices", "com.bluestacks.home", "com.bluestacks.windowsfilemanager", "com.bluestacks.settings", "com.bluestacks.bluestackslocationprovider", "com.bluestacks.appsettings", "com.bluestacks.bstfolder", "com.bluestacks.BstCommandProcessor", "com.bluestacks.s2p", "com.bluestacks.setup", "com.bluestacks.appmart", "com.kaopu001.tiantianserver", "com.kpzs.helpercenter", "com.kaopu001.tiantianime", "com.android.development_settings", "com.android.development", "com.android.customlocale2", "com.genymotion.superuser", "com.genymotion.clipboardproxy", "com.uc.xxzs.keyboard", "com.uc.xxzs", "com.blue.huang17.agent", "com.blue.huang17.launcher", "com.blue.huang17.ime", "com.microvirt.guide", "com.microvirt.market", "com.microvirt.memuime", "cn.itools.vm.launcher", "cn.itools.vm.proxy", "cn.itools.vm.softkeyboard", "cn.itools.avdmarket", "com.syd.IME", "com.bignox.app.store.hd", "com.bignox.launcher", "com.bignox.app.phone", "com.bignox.app.noxservice", "com.android.noxpush", "com.haimawan.push", "me.haima.helpcenter", "com.windroy.launcher", "com.windroy.superuser", "com.windroy.launcher", "com.windroy.ime", "com.android.flysilkworm", "com.android.emu.inputservice", "com.tiantian.ime", "com.microvirt.launcher", "me.le8.androidassist", "com.vphone.helper", "com.vphone.launcher", "com.duoyi.giftcenter.giftcenter"};private static final String[] PATHS = {"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "/system/lib/libc_malloc_debug_qemu.so", "/sys/qemu_trace", "/system/bin/qemu-props", "/dev/socket/qemud", "/dev/qemu_pipe", "/dev/socket/baseband_genyd", "/dev/socket/genyd"};private static final String[] FILES = {"/data/data/com.android.flysilkworm", "/data/data/com.bluestacks.filemanager"};public static boolean isSimulator(Context paramContext) {try {List pathList = new ArrayList();pathList = getInstalledSimulatorPackages(paramContext);if (pathList.size() == 0) {for (int i = 0; i < PATHS.length; i++)if (i == 0) {if (new File(PATHS[i]).exists()) continue;pathList.add(Integer.valueOf(i));} else {if (!new File(PATHS[i]).exists()) continue;pathList.add(Integer.valueOf(i));}}if (pathList.size() == 0) {pathList = loadApps(paramContext);}return (pathList.size() == 0 ? null : pathList.toString()) != null;} catch (Exception e) {e.printStackTrace();}return false;}public static List getSimulatorInfo(Context paramContext) {List pathList = new ArrayList();List simulatorMaps = new ArrayList();try {pathList = getInstalledSimulatorPackages(paramContext);String brand = getSimulatorBrand(pathList);if (TextUtils.isEmpty(brand)) {List<String> list = loadApps(paramContext);if (list.size() > 0) {simulatorMaps.add(list.get(0));}} else {simulatorMaps.add(brand);}} catch (Exception e) {e.printStackTrace();}return simulatorMaps;}private static List getInstalledSimulatorPackages(Context context) {ArrayList localArrayList = new ArrayList();try {for (int i = 0; i < PKG_NAMES.length; i++)try {context.getPackageManager().getPackageInfo(PKG_NAMES[i], 1);localArrayList.add(PKG_NAMES[i]);} catch (PackageManager.NameNotFoundException localNameNotFoundException) {}if (localArrayList.size() == 0) {for (int i = 0; i < FILES.length; i++) {if (new File(FILES[i]).exists())localArrayList.add(FILES[i]);}}} catch (Exception e) {e.printStackTrace();}return localArrayList;}public static List loadApps(Context context) {Intent intent = new Intent(Intent.ACTION_MAIN, null);intent.addCategory(Intent.CATEGORY_LAUNCHER);List<String> list = new ArrayList<>();List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(intent, 0);//for循环遍历ResolveInfo对象获取包名和类名for (int i = 0; i < apps.size(); i++) {ResolveInfo info = apps.get(i);String packageName = info.activityInfo.packageName;CharSequence cls = info.activityInfo.name;CharSequence name = info.activityInfo.loadLabel(context.getPackageManager());if (!TextUtils.isEmpty(packageName)) {if (packageName.contains("bluestacks")) {list.add("蓝叠");return list;}}}return list;}private static String getSimulatorBrand(List<String> list) {if (list.size() == 0)return "";String pkgName = list.get(0);if (pkgName.contains("mumu")) {return "mumu";} else if (pkgName.contains("ami")) {return "AMIDuOS";} else if (pkgName.contains("bluestacks")) {return "蓝叠";} else if (pkgName.contains("kaopu001") || pkgName.contains("tiantian")) {return "天天";} else if (pkgName.contains("kpzs")) {return "靠谱助手";} else if (pkgName.contains("genymotion")) {if (Build.MODEL.contains("iTools")) {return "iTools";} else if ((Build.MODEL.contains("ChangWan"))) {return "畅玩";} else {return "genymotion";}} else if (pkgName.contains("uc")) {return "uc";} else if (pkgName.contains("blue")) {return "blue";} else if (pkgName.contains("microvirt")) {return "逍遥";} else if (pkgName.contains("itools")) {return "itools";} else if (pkgName.contains("syd")) {return "手游岛";} else if (pkgName.contains("bignox")) {return "夜神";} else if (pkgName.contains("haimawan")) {return "海马玩";} else if (pkgName.contains("windroy")) {return "windroy";} else if (pkgName.contains("flysilkworm")) {return "雷电";} else if (pkgName.contains("emu")) {return "emu";} else if (pkgName.contains("le8")) {return "le8";} else if (pkgName.contains("vphone")) {return "vphone";} else if (pkgName.contains("duoyi")) {return "多益";}return "";}
}

如上是一个完整的工具类:

我是在BaseActivity的onCreate方法中调用了一下,如果有使用模拟器,直接finish;经自测,可以;故做记录;

设置 app 不能在模拟器上运行相关推荐

  1. APP在电脑模拟器上完美运行,真机运行时闪退现象记录

    由于疫情原因以及公司要求 在家已经呆了快两个月了,作为大四快毕业的实习生来说,这两个月肯定没有静下心来好好学习...哈哈哈 但是要准备写毕业论文了,所以准备把以前写过的程序当做毕业设计,于是时隔七周重 ...

  2. 禁止应用在模拟器上运行的方案及app安全问题

    大家都知道,应用安装到模拟器上,运行应用直接读取你的应用数据(如.archiver和.plist文件).甚至能够通过修改模拟器的经纬度来达到模拟使用应用的人运行轨迹的效果,进而达到欺骗那些通过GPS计 ...

  3. Android项目中使用激光推送时在模拟器上运行时报Fatal signal 11的解决

    本人一直用真机调试极光推送,一直没问题,今天准备在模拟器上运行项目看看,刚运行就爆掉了,感觉有些奇怪,遂查日志: 呵呵,致命错误:Fatal signal 11 (SIGSEGV) at 0x0007 ...

  4. 别只关注M1芯片的苹果笔记本,iOS APP支持在 Mac上运行也是大事

    将会在当地时间 11 月 10 日(北京时间 11 月 11 日凌晨 2 点)在 Apple Park 举办发布会,这是苹果在本年度秋季举行的第三次发布会,App Store 上似乎透露出发布会的蛛丝 ...

  5. android禁用模拟器,Android 禁止应用在模拟器上运行

    一种禁止应用在模拟器上运行的思路,首先要分辨出模拟器和真机,然后对模拟器的做处理. 方法1: 检测点:电池电量和温度(模拟器的电池伏数可以为0或者是1000,而温度一定是0.但是真机的是可变的) pu ...

  6. 【Android 逆向】Frida 框架 ( Frida 2 种运行模式 | Frida 12.7.5 版本相关工具下载地址 | 在 Android 模拟器上运行 Frida 远程服务程序 )

    文章目录 一.Frida 2 种运行模式 二.Frida 12.7.5 版本相关工具下载地址 三.在 Android 模拟器上运行 Frida 远程服务程序 1.启动雷电模拟器 2.上传 frida- ...

  7. 在模拟器上运行程序报错

    创建好了模拟器,运行一个程序时,选择模拟器设备 没有看到报错,看到studio下方显示install apk,查看模拟器launcher,发现apk已经安装上 直接点击模拟器上的图标,没有成功启动,发 ...

  8. android ndk arm,Android NDK ARM构建设置可在大多数设备上运行?

    我有一些Android NDK应用程序出来了,人们抱怨我的应用程序无法在他们的手机上运行.我想知道的是哪些编译设置将支持市场上大多数(如果不是全部)ARM设备? 我的问题似乎是armeabi-v7a设 ...

  9. 自定义android模拟器,在模拟器上运行自定义Android ROM

    我建立了一个基于AOSP的自定义ROM(Nexus 6的7.0),我想将这个ROM与SDK模拟器一起使用.我相信这个版本的午餐组合是'aosp_x86_64-eng' 应该适用于SDK模拟器.但是,我 ...

最新文章

  1. 委托、多播委托(MulticastDelegate)
  2. 亚麻:Round Robin
  3. python:dist-packages site-packages
  4. react系列项目地址
  5. java service wrapper日志参数设置及优化
  6. android更新完之后怎么打开app,在Android中启动/更新后,检查App是否第一次打开
  7. Java代码实现负载均衡五种算法
  8. 常用的Struts 2.0的标志(Tag)介绍
  9. 工作407-启动vue项目出现Module build failed (from ./node_modules/sass-loader/dist/cjs.js): ValidationError: I
  10. AndroidStudio使用入门
  11. 发生一个未处理的异常 脚本调试 错误号2912
  12. 中国最让人脸红的节目:爆火14年的湿身诱惑,为何还没被叫停?
  13. mysql服务器失败1396_MYSQL ERROR 1396 (HY000) 错误的解决办法
  14. android 样式预处理,基于Android平台的字符识别预处理算法设计与实现
  15. 使用Freetype发现的问题记录
  16. 管理感悟:软件第一法则
  17. ubuntu安装锐捷客户端
  18. Tensorflow多输入模型构建以及Dataset数据构建
  19. 工地实名制人脸识别门禁通道闸机如何安装?
  20. 科海思苯酚吸附树脂ADS600详情 参数

热门文章

  1. 中缀转后缀并分别计算
  2. 一则有意思的产品小故事
  3. 前端工程师的摸鱼日常(7)
  4. python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
  5. 未来的计算机作文六百字,未来想象作文六百字
  6. latex 公式编号的自定义
  7. 【数学建模】“一口价”的战略(博弈模型)
  8. 新一代人工智能:从“感知智能”向“认知智能”转化
  9. 计算机网络中的网络安全
  10. artemis mq配置开机启动 (centos7)(artemis Init Script)