模拟器概述
定义
安卓模拟器是一种可以运行在电脑上的虚拟设备,通过它可以实现应用的跨平台操作,让移动端APP无需任何改动即可在PC上执行。
特性
优势
随着技术的不断发展,目前模拟器基本已经能够完成手机90%以上的功能。此外,由于在PC端工作,与传统手机相比,具有以下几点优势:
-
更炫:支持大屏幕、提供更炫酷的视觉效果,从而能够天然的将一些移动端由于适配成客户端应用;
-
易上手:支持鼠标、键盘、手柄、摄像头等众多硬件外设,将操作方式从手指运动中解放出来,发挥外设的优势;
-
更强的性能:通过模拟器可自定义配置性能参数,发挥PC硬件性能优势,跑分数据远超手机,使得高配游戏运行不再卡顿;
-
更好的操控性:通过虚拟按键功能,能够将任意点触操作、震动、摇摇等手机独有操作映射到键盘的自定义按键,更加简易、便捷;
-
使用PC工具:利用PC端其他辅助工具完成对移动端应用的支持,如通过按键精灵完成自动挂机等操作,解放双手;
-
模拟多人操作:通过模拟器多开功能,零成本体验同时多部手机、多个账户开小黑屋,实现刷单的快感;
-
更便捷的虚拟定位功能:通过模拟器虚拟定位,让你轻松落脚五湖四海;
-
再也不用担心电池电量、手机流量了…
问题
此外,Android模拟器鉴于自身技术瓶颈,也存在以下普遍问题:
-
性能:运行时普遍需要占据较大的CPU、内存等资源,导致低配机运行不流畅。此外,即便是高配机,多开也很容易出现卡顿等现象;
-
稳定性:模拟器技术本身的BUG导致的闪退、花屏、无响应等现象;
-
兼容性
-
硬件兼容性:主要表现为大部分模拟器对AMD架构PC的不支持;
-
应用兼容性:比如部分模拟器尚不兼容ARM架构的APP,又或者某些应用对安卓内核、虚拟机的调用方式比较底层,当模拟器对这些接口支持的不好时,表现为该类程序无法在模拟器上运行;
-
PC系统兼容性:表现为模拟器主要适配Windows主流平台,而能在Mac下运行的很少,且过低、过高版本支持的不好(如XP之前版本、Win 10,市面上某些定制的平板系统等);
-
安卓系统兼容性:目前模拟器上的Android系统仍然停留在4.x,部分达到5.1,使得部分对安卓版本有要求的应用或游戏在模拟器上运行体验不好。
底层关键技术
虚拟化技术
模拟器是用软件来模拟硬件操作,这就需要用到虚拟化技术。广义的虚拟化,是指将网络、CPU、内存及存储等各种实体资源,予以抽象、转换后呈现出来,进而打破实体结构间不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。我们所熟知的虚拟机就是虚拟化技术中的一种,通常来说它们只是模拟了一套与Host主机相同架构、相同指令集的硬件平台,不涉及内存和CPU的虚拟化。所有的Android模拟器都在不同程度上运用了虚拟化技术,比如雷电、夜神,包括Bluestack模拟器是基于Virtualbox虚拟机,谷歌原生模拟器和红手指云模拟器则是应用了Qemu的虚拟化技术。
CPU虚拟化
目前,已知的所有ARM架构的模拟器都是基于Qemu虚拟机。Qemu采用的是纯软件模拟,在物理机的操作系统上创建一个模拟硬件的程序来仿真所有想要的硬件,然后在上面跑ARM运行时。在这种环境下,由于程序每次执行都需要将其翻译成宿主机(X86)的指令,导致性能非常低下,这也是原生模拟器不够流畅的原因之一。
ARM Translation
当下主流的Android模拟器都是X86架构,基于Virtualbox虚拟机。由于不需要做CPU虚拟化,少了一层指令集转换过程,因此在运行支持X86架构的app时,就和普通的虚拟机没有区别,速度也就明显提高了很多。 此外,针对ARM架构的兼容性问题,普遍采用的是半虚拟化,根据二进制翻译技术将ARM指令动态翻译成X86指令。黑产常用的模拟器目前市面上安卓模拟器软件种类繁多,有51、mumu、蓝叠、夜神、逍遥、海马玩、雷电等等。通过在黑产聚集论坛、QQ群等多个渠道进行调研,我们发现黑产当下常用的是夜神、雷电和逍遥模拟器。
可以注意到,这些模拟器的共通点是都自带修改设备参数、多开、操作录制和虚拟定位等功能。
模拟器检测技术框架模拟器检测的本质就是要利用模拟器和真机之间的微小差异,从而判断当前设备是否为模拟器,具体检测技术框架整理如下:
如何挖掘特征
结合前面梳理出的模拟器检测框架,后续在做相应的特征挖掘时,可直接根据该脑图做进一步的完善和加强。
特征项 | 细分点 | 描述 | 备注 | |
软件信息 | 应用层 | |||
系统库 | ||||
无线射频 | WIFI | |||
GPS | ||||
… | ||||
硬件信息 | 底层硬件 | CPU | ||
电池 | ||||
设备参数 | ||||
硬件抽象层 | 图形 | |||
相机 | ||||
蓝牙 | ||||
输入 | ||||
存储 | ||||
传感器 | ||||
文件系统(重点关注Linux内核相关) | 检查/sys硬件驱动信息 | |||
检查/dev设备节点特征 | ||||
检查/proc运行时的内核信息映射 | ||||
… |
此外,基于文件系统差异的特征挖掘,具体可参考Android根目录文件结构进行操作,以下是几个重要的目录/文件的说明:
-
/mnt:挂载点目录
-
/etc:指向 /system/etc ,系统配置文件所在目录
-
/data:存放用户安装的应用以及各种数据
-
/system:Android系统目录文件夹
-
/dev:设备节点文件存放地
-
/sys:用于挂载 sysfs文件系统,在设备模型中,sysfs文件系统用来表示设备的结构,将设备的层次结构形象的反应到用户空间中
-
/proc:这是一个虚拟的文件系统,不占用实际存储空间。它以文件系统的方式为访问系统内核的操作提供接口,动态从系统内核中读出所需信息
-
init.rc:启动脚本
-
default.prop:系统属性配置文件
对应的检测弱点
基于模拟器结构特征,利用任务调度检测模拟器
原理
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
总结
首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。
另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
完!**
[外链图片转存中…(img-7NYTFsVR-1712650717804)]
[外链图片转存中…(img-31ILQkKe-1712650717805)]
[外链图片转存中…(img-pfWEGq9O-1712650717805)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!