-
-
[原创] 某讯某用宝运行安卓应用原理分析
-
发表于: 5小时前 350
-
前一段时间看到新闻,该程序实现了在Windows x86架构CPU的PC上面运行安卓应用,ARM架构的程序却可以跑在x86架构的机器上面,确实值得探究探究。之前Windows 11也推出过WSA(Windows Subsystem for Android)也是实现了相同的功能,这两者的技术路线会不会什么不同,下面内容将为你解开心中疑问。由于我本人也没有对Android系统的进行过深入研究,文章内容仅介绍技术路线。
Windows子系统WSA
WSL
介绍WSA之前需要先了解一下WSL,WSL(Windows Subsystem for Linux)是基于Hyper-V提供的一个Linux环境,允许用户在Windows操作系统上直接运行Linux命令行工具和应用程序,而无需使用传统的虚拟机或双引导系统。它主要通过拦截Linux系统调用,维护一张系统调用表,将其转化为Windows支持的API来实现的,包括:进(线)程管理、文件系统和网络系统等。
WSA
由于Android系统的本质还是一个Linux系统,Android应用大多也是arm架构下的程序,于是微软基于WSL之上构建起一套Android框架,这就是WSA。我们知道,Windows系统支持arm和x86架构的CPU,如果是arm架构的windows系统,则Android框架中的应用程序不存在模拟问题,即Android -> arm linux -> arm windows;而x86架构的CPU需要使用IBT(Intel Bridge Technology)来将arm指令转换为x86指令,即Android -> x86 linux -> x86 windows。IBT的架构图如下:
某用宝分析
上面的新闻链接之说了微软的应用商店支持了某用宝,如下图所示,但其实某用宝的exe程序也支持,实现的路线都是一样的,没有区别。
安装过程中,它一直强调需要PC支持Intel VT技术,不然无法运行Android APP,这个技术一般是虚拟机才会用到的。APP的运行环境是Android 13 Celadon系统,使用了IBT技术。
那么我的推测某用宝技术路线如下:首先构建了一个虚拟机环境,这个虚拟机环境中是一个x86版本的celadon的Android系统,你也可以称它为Linux系统,这个系统可以运行Android APP。某用宝外部和虚拟机进行交互实现了APP安装和启动,以及其他的UI界面交互和展示。
虚拟机
虚拟机是一种通过软件模拟实现的计算机系统,它可以运行操作系统以及应用程序。虚拟机的概念允许用户在同一台物理机器上同时运行多个不同的操作系统环境,每个环境都像是在独立的硬件上运行一样。它的主要特点如下:
- 隔离性:每个虚拟机都有自己的虚拟化资源,如CPU、内存、硬盘和网络接口等,因此它们之间是相互隔离的,一个虚拟机内的操作不会影响到另一个虚拟机。
- 可移植性:虚拟机可以作为一个文件或一组文件保存下来,这意味着你可以轻松地将整个虚拟机从一台物理主机迁移到另一台物理主机上。
- 兼容性:大多数虚拟化平台支持多种操作系统作为客户操作系统,包括各种版本的Windows、Linux、macOS等。
- 资源管理:虚拟机技术允许动态分配和调整资源,如增加或减少分配给虚拟机的CPU核心数、内存大小等。
- 快照与恢复:虚拟机支持创建快照功能,可以在任何时间点捕获虚拟机的状态,并在需要时恢复到该状态,这对于测试和开发非常有用。
在APP运行期间,并没有出现虚拟机运行的界面,如何判定有虚拟机正在运行呢?
因为虚拟机一般占据内存比较大,我发现有一个ABoxHeadLess.exe进行占据了较大的内容,如下图:
使用everything找到ABoxHeadLess.exe文件所在的文件夹"C:\Program Files\*******Box",发现文件列表如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 11/15/2024 10:12 PM platforms d----- 11/15/2024 10:12 PM sign d----- 11/15/2024 10:12 PM x86 -a---- 10/14/2024 5:34 PM 210672 ABoxDDR0.r0 -a---- 10/14/2024 5:11 PM 189024 ABoxHeadless.exe -a---- 10/14/2024 5:11 PM 1334368 ABoxManage.exe -a---- 10/14/2024 5:11 PM 2869 ABoxSup.inf -a---- 10/14/2024 5:34 PM 366848 ABoxSup.sys -a---- 10/14/2024 5:11 PM 5818976 ABoxSVC.exe -a---- 10/14/2024 5:11 PM 16992 SUPInstall.exe -a---- 10/14/2024 5:11 PM 19552 SUPLoggerCtl.exe -a---- 10/14/2024 5:11 PM 16992 SUPUninstall.exe -a---- 10/14/2024 5:34 PM 1925808 Updater32.exe -a---- 10/14/2024 5:11 PM 2680416 vbox-img.exe -a---- 10/14/2024 5:11 PM 19040 VBoxAuth.dll -a---- 10/14/2024 5:11 PM 28256 VBoxAuthSimple.dll -a---- 10/14/2024 5:11 PM 70240 VBoxAutostartSvc.exe -a---- 10/14/2024 5:11 PM 147040 VBoxBalloonCtrl.exe -a---- 10/14/2024 5:11 PM 83040 VBoxBugReport.exe -a---- 10/14/2024 5:11 PM 3031648 VBoxC.dll -a---- 10/14/2024 5:11 PM 32864 VBoxCAPI.dll -a---- 10/14/2024 5:12 PM 1360480 VBoxCpuReport.exe -a---- 10/14/2024 5:11 PM 171616 VBoxDbg.dll -a---- 10/14/2024 5:11 PM 2007136 VBoxDD.dll -a---- 10/14/2024 5:11 PM 8757344 VBoxDD2.dll -a---- 10/14/2024 5:11 PM 413280 VBoxDDU.dll -a---- 10/14/2024 5:11 PM 2195552 *******Box.exe -a---- 10/14/2024 5:11 PM 1691232 *******BoxVM.exe |
这我熟啊,前一段时候,一个朋友从VirtualBox源码编译的文件和这个几乎一模一样,如果我们打开*******Box.exe(需要管理员权限),会出现如下界面:
这下实锤了,它就是VirtualBox虚拟机软件,或许对源码进行了部分修改。从该界面我们知道了有一个虚拟机实例TVM_3000来运行着Android应用,这个实例的部分配置信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Chipset: piix3 Firmware: EFI Number of CPUs: 6 PAE: enabled Long Mode: enabled Triple Fault Reset: disabled APIC: enabled X2APIC: enabled Paravirt. Provider: KVM Effective Paravirt. Prov.: KVM Hardware Virtualization: enabled Nested Paging: enabled Large Pages: enabled VT-x VPID: enabled VT-x Unrestricted Exec.: enabled |
这就回答了为什么它强调PC需要支持Intel VT,如果不支持,那么虚拟机纯软件模拟来运行Android系统将会非常慢。另外,为了实现网络加速,它还启用了virtio-net。
总结:某用宝使用VirtualBox虚拟机来启动一个Android系统。
Celadon Android系统
Celadon是一个基于Android的开源项目,它旨在为Intel架构的设备提供Android运行环境的支持。这个项目特别适合那些希望在非ARM架构的硬件上运行Android应用程序的开发者和用户。Celadon由Intel发起并维护,它不仅支持传统的Android功能,还提供了对最新Android API 的支持,使得开发者能够更容易地将应用移植到Intel平台上。Celadon的主要特点如下:
跨架构支持:Celadon 可以让 Android 应用在 x86 架构的设备上运行,这为那些想要利用 Intel 处理器性能优势的用户提供了便利。
开源:作为一个开源项目,Celadon 鼓励社区贡献,同时也方便开发者根据自身需求进行定制和优化。
兼容性:Celadon 致力于保持与标准 Android 生态系统的兼容性,支持最新的 Android 版本和 API,确保应用能够顺利运行。
开发工具:Celadon 提供了一系列开发工具和文档,帮助开发者更高效地构建、调试和部署应用。
性能优化:针对 Intel 架构进行了专门的优化,提高了应用的运行效率和用户体验。
前文介绍了,它启动了一个虚拟机实例,但如何确认这个实例系统是Celadon Android系统呢?
其实在这个虚拟机的配置文件中有一段关于网络的配置信息,如下:
1 2 | <Forwarding name= "ADB_PORT" proto= "1" hostip= "127.0.0.1" hostport= "5655" guestport= "5555" /> <Forwarding name= "ADB_PORT_DEV" proto= "1" hostip= "127.0.0.1" hostport= "5555" guestport= "5555" /> |
熟悉Android的同学可能立马就想到了,可以使用adb(Android Debug Bridge)工具,进去这个系统看看。这个adb工具无需下载,某用宝中自带了。执行adb connect 127.0.0.1:5555
和adb devices
,可以看到如下结果:
1 2 3 | List of devices attached 127.0.0.1:5555 device emulator-5554 device |
这两个结果都是属于那个Android系统的,说明我们已经连接成功。可以看下这个系统的一些信息:
1 2 3 4 5 6 7 8 9 10 | // 型号: adb shell getprop ro.product.model AOSP on Intel Platform // 品牌: adb shell getprop ro.product.brand SAMSUNG // 系统信息: adb shell cat /proc/version Linux version 6.1.92-ga5cb9c909399 (nobody@android-build) (Android (8490178, based on r450784d) clang version 14.0.6 (https: //android.googlesource.com/toolchain/llvm-project 4c603efb0cca074e9238af8b4106c30add4418f6), LLD 14.0.6) #2 SMP PREEMPT_DYNAMIC Fri Nov 8 12:27:04 CST 2024 // 架构:adb shell uname -m x86_64 // adb shell getprop ro.board.platform celadon |
上述可以看出这是一个Ubuntu 18.04(bionic) x86_64系统,系统版本是Celadon Android 13。这些信息和某用宝提供的信息是一致的。
其他技术点
前文只是介绍了大体的技术路线。其他值得思考的实现,比如:如何实现在Windows中可以卸载APP、如何外部启动APP,让APP弹出独立的界面,并且可以接受鼠标的点击等。这些问题都是值得思考的,后续如果有时间的再进行研究。
WSA和某用宝比较
从上文可以看出,两者都是使用了IBT技术,在一个Linux系统中运行着Celadon服务,使得Android应用可以正常运行。主要不同点在于实现Linux系统的路线不同:Windows使用的是WSL,一个定制化的Linux系统;而某用宝使用的是VirtualBox+Linux系统,可能这个系统也进行了定制化。至于两者哪个效率更高,留给读者自己思考。
相关链接
Windows WSL
WSL原理介紹
Windows WSA
Celadon项目
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创] 某讯某用宝运行安卓应用原理分析 375
- [原创] 某讯某用宝运行安卓应用原理分析 351
- Conti 6096