Linux 系统运行 Android 应用的几种方案

这几年,国产操作系统替代正在有条不紊地进行中。但生态是绕不过去的一道坎,指望应用厂商一下子完成国产系统适配也不现实。之前介绍过使用 Wine 运行 Windows 应用的方案,减少了国产系统应用偏少的难题。比如我在办公室使用最多的企业微信,一直没有开发 Linux 版本,就是通过 Wine 运行的。

除了 Windows 应用,还有新的目标,那就是手机应用。这些年移动互联网蓬勃发展,手机 app 从数量上已经远远超过桌面应用,如果能在桌面系统运行手机应用,那也能一定程度补齐国产操作系统的短板。手机应用主要是安卓和 iOS 两家。iOS 系统由于其封闭性,不太容易兼容,所以现在的方案基本上都是针对 Android 应用。

总体说来,在 Linux 系统上运行 Android 应用,有如下方案。

  1. QEMU 模拟器方案

QEMU 基于虚拟化技术创建完整的 Android 虚拟机。通过模拟硬件设备(CPU、内存、屏幕等)运行完整的 Android 系统镜像,支持多版本 Android 和自定义设备配置。

这种方案支持完整的 Android 系统功能,适用于开发测试复杂的应用(如依赖特定传感器或 GPU 加速的应用)。比如谷歌官方的安卓模拟器就是在 QEMU 的基础上定制的。

但这种方案的缺点也是非常明显,模拟器启动非常缓慢,使用 Android 模拟器做过开发的同学应该深有体会,而且模拟器还需要模拟 ARM 指令,效率低下,所以在模拟器里运行安卓程序也是非常缓慢。

这种方法用来做开发调试还可接受,但如果只是为了运行安卓应用,那是万万不可能的。

  1. anbox 容器化方案

Anbox 是"Android in a Box"的简称,是一种基于容器化技术的开源方案,目标是让 Android 应用程序直接在 Linux 系统上运行。

通过 Linux 容器(LXC)技术实现 Android 运行时环境的隔离,复用 Linux 内核直接执行应用,无需虚拟化硬件。硬件访问请求统一通过宿主机的 anbox 守护进程转发。

Anbox 借了 QEMU 模拟器的 OpenGL ES 渲染方案,通过虚拟化管道(fast pipes)实现图形加速,支持 Android 应用的窗口化显示,与 Linux 桌面环境无缝集成。

听起来很美好,但该项目已于2023年停止更新,究其原因,可能是兼容性差,依赖非标准内核模块 binder (进程间通信)和 ashmem (共享内存),显卡兼容性也不好,很多应用只是那能用,但跑起来存在诸多问题。

在 anbox 的主页上,建议用户转向 waydroid 项目和 anbox cloud(由 Ubuntu 支持)。

  1. waydroid 容器化方案

Waydroid 和 anbox 类似,利用 Linux 容器(LXC) 技术,通过命名空间(如用户、进程、网络、挂载等)隔离 Android 运行时环境。它直接复用宿主机的 Linux 内核,无需虚拟化硬件,显著降低资源开销。Android 系统的文件系统(如 /system 、 /data )以独立挂载的方式与宿主机隔离,确保应用数据互不干扰。

Waydroid 支持自由调整窗口大小,模拟手机或平板界面。而且 Android 应用可自动添加到 Linux 应用菜单,支持拖拽文件互通。

正如名字所示,该方案要求 Linux 系统需支持 Wayland 显示协议 和 systemd。内核需启用 binder 、 ashmem 等模块,建议使用 Linux 5.4+ 版本。

Waydroid 支持的 Android 系统版本为 11 和12,比 anbox (只支持 Android 7) 更加友好。

  1. 麒麟 KMRE

麒麟软件开源的 KMRE(Kylin Mobile Runtime Environment,麒麟移动运行环境) 是国内首个基于容器化技术的商用移固融合方案,旨在通过兼容 Android 应用生态,解决 Linux 操作系统应用短缺的难题。

KMRE 和 anbox、Waydroid 类似,基于 Linux 容器(LXC) 技术实现 Android 与 Linux 的深度集成。通过适配 OpenGL|ES 和 Wayland 协议,支持国际主流显卡(如 NVIDIA、AMD)及国产显卡(如摩尔线程)的图形加速。

此外,KMRE 改进了 窗口管理,Android 应用窗口与 Linux 桌面窗口统一调度,支持多窗口自由缩放、分屏显示。

而且还实现了数据互通,剪贴板、文件系统、输入法、通知中心等与 Linux 桌面共享。

KMRE 在国产化支持方面做得不错,覆盖 x86 和 ARM 架构,适配飞腾、兆芯、海光、Intel、AMD 等 CPU,以及国产显卡。

  1. 小结

上面的各种方案或多或少都有一些缺点,只是为了生态需求采用的方案,我们当然希望软件开发商都推出 Linux 适配版本,彻底抛弃 wine 和 Android 模拟器才是最终方案。

话说全村的希望鸿蒙 PC 会如何应对这一难题,让我们拭目以待。

相关推荐
鹏多多7 分钟前
flutter睡眠与冥想数据可视化神器:sleep_stage_chart插件全解析
android·前端·flutter
草莓熊Lotso12 分钟前
红黑树从入门到进阶:4 条规则如何筑牢 O (logN) 效率根基?
服务器·开发语言·c++·人工智能·经验分享·笔记·后端
0wioiw020 分钟前
跨网络互联技术(Nginx反向代理)
服务器·网络·nginx
勇气要爆发41 分钟前
【第五阶段-高级特性和架构】第三章:高级状态管理—GetX状态管理篇
android·架构
带鱼吃猫1 小时前
Linux系统:策略模式实现自定义日志功能
linux·c++
程序员潇潇1 小时前
Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!
运维·自动化测试·软件测试·功能测试·程序人生·职场和发展·jenkins
minji...1 小时前
Linux 进程概念 (三) (进程状态,僵尸进程,孤儿进程,进程优先级)
linux·运维·服务器
敲上瘾2 小时前
Docker镜像构建优化指南:CMD/ENTRYPOINT、多阶段构建与缓存优化
运维·缓存·docker·容器·架构
未来之窗软件服务3 小时前
服务器运维(十五)自建WEB服务C#PHP——东方仙盟炼气期
android·服务器运维·东方仙盟·东方仙盟sdk·自建web服务
是小胡嘛6 小时前
C++之Any类的模拟实现
linux·开发语言·c++