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 指令,效率低下,所以在模拟器里运行安卓程序也是非常缓慢。

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

2. 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 支持)。

3. 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) 更加友好。

4. 麒麟 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,以及国产显卡。

5. 小结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python进阶教程丨lambda函数

1. lambda函数是什么? 在 Python 里,lambda 函数是一种特殊类型的函数,也被叫做匿名函数。匿名”意味着它不需要像常规函数那样使用 def 来进行命名。lambda lambda 函数本质上是简洁的临时函数 ,它适用于只需要简单逻辑的场景&a…

TK矩阵系统:高效管理与智能化操作平台

随着TikTok等社交媒体平台的快速发展,短视频创作和内容运营逐渐成为互联网行业的重要组成部分。为了帮助内容创作者、品牌运营商以及数据分析人员更高效地管理多个TikTok账号并优化运营策略,TK矩阵系统提供了一种全新的解决方案,结合了先进的…

Spring Boot整合Apache BookKeeper教程

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot整合Apache BookKeeper教程 1. 简介 Apache BookKeeper 是一个高性能、持久化的分布式日志存储系统,适用于需要强一致性和高吞吐量的…

苹果HFS+56TB存储MOV文件出错的恢复方法

HFS文件系统是Apple电脑中默认的最常见的文件系统。HFS来源于UNIX,优势就是稳定性,另外HFS是支持日志功能的,所以很多存储设备也采用了HFS文件系统。再稳定的文件系统也有“马失前蹄”的时候,下面就来聊下HFS出现文件出错、丢失时…

电源电路篇

电源电路篇 一、LDO-Low Dropout Regulator(低压差线性稳压器)1.1 AMS1117-3.3V芯片 二、DCDC-Direct Current to Direct Current(开关稳压器)2.1 降压(Buck)电路2.1.1 TPS5450-5V芯片 一、LDO-Low Dropout Regulator(低压差线性稳压器) LDO是一种线性稳压器,用于提…

java项目之在线购物系统(源码+文档)

项目简介 在线购物系统实现了以下功能: 使用在线购物系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的…

go语言中空结构体

空结构体(struct{}) 普通理解 在结构体中,可以包裹一系列与对象相关的属性,但若该对象没有属性呢?那它就是一个空结构体。 空结构体,和正常的结构体一样,可以接收方法函数。 type Lamp struct{}func (l Lamp) On()…

Unity实现连连看连线效果

1.一个比较简单的向量计算,用的LineRenderer实现; 已知起始A点和终点C点,求B点; 先计算A点到C点的向量取归一化当做方向,再给定一个“模长”(B点到A点的模长)乘以该方向,最后加上L…

【MySQL】触发器与存储引擎

目录 触发器基本概念触发器操作创建触发器NEW 与 OLD查看触发器删除触发器 注意事项 存储引擎基本概念基本操作查询当前数据库支持的存储引擎查看当前的默认存储引擎查看某个表用的存储引擎创建表时指定存储引擎修改表的存储引擎 触发器 基本概念 概述: 触发器&a…

能“嘎嘎提升”提升用户居住体验的智能家居物联网框架推荐!

智能家居在日常生活中给我们的带来了更多的便利,更让有些用户切实地体会到了科技的魅力,对于想要打造属于自己的智能家居氛围感的用户们,以下是一些能够帮助提升居住体验的智能家居物联网框架及应用: 1. 涂鸦智能(Tuy…

DevEco Studio的使用

目录 1.创建ArkTS工程 2.ArkTS工程目录结构(Stage模型) 构建第一个页面 构建第二个页面 实现页面间的跳转 1.创建ArkTS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择…

性能监控——vmstat

性能监控——vmstat ​ 性能监控是对 IT 系统运行效率和有效性的系统观察和测量。它涉及收集、分析和报告各种组件(包括应用程序、网络、服务器和数据库)的关键性能指标 (KPI)。此过程使用专门的工具来跟踪响应时间、吞吐量、资源利用率和错误率等指标。…

搭建Python量化开发环境:从零开始的完整指南

搭建Python量化开发环境:从零开始的完整指南 在量化投资领域,一个稳定且高效的开发环境是成功的关键。本文将引导你一步步搭建起自己的Python量化开发环境,确保你能够顺利开始编写和运行量化策略。 🚀量化软件开通 &#x1f68…

图像分割的mask有空洞怎么修补

分享一个对实例分割mask修补的方法,希望对大家有所帮助。 1. 这是我准备分割的图片 2 分割结果 可以看到衣服部分有一些没分割出来,二值化图片能清晰看到衣服部分有些黑色未分出的地方。 3 补全mask区域 import cv2 import numpy as npdef fill_mask_h…

Qt 控件概述 QLabel

目录 QLabel显示类控件 label如何做到与窗口同步变化 边框 Frame QLabel显示类控件 ​​ ​​ textFormat :设置文件格式 ​ Pixmap :标签图片 label如何做到与窗口同步变化 Qt中对应用户的操作 : 事件和信号 拖拽窗口大小就会触发…

词频统计 ccf-csp 2024-2-1

在学习了文本处理后,小 P 对英语书中的 n篇文章进行了初步整理。 具体来说,小 P将所有的英文单词都转化为了整数编号。 假设这 n 篇文章中共出现了 m个不同的单词,则把它们从 1到 m进行编号。 这样,每篇文章就简化为了一个整数…

用爬虫解锁 Shopee 店铺商品数据,开启电商新洞察

在电商竞争白热化的当下,Shopee 作为全球知名的电商平台,汇聚了海量的商品与商机。对于电商从业者、数据分析师、创业者来说,精准掌握 Shopee 店铺的商品信息,就如同手握一把开启财富大门的钥匙。而爬虫技术,无疑是帮助…

k8s中的service解析

k8s中的service解析 在k8s中,我们可以通过pod来创建服务。 然而,当我们创建多个 Pod 来提供同一项服务时,直接通过 Pod IP 进行访问会变得复杂且不可维护。因此,Kubernetes 提供了 Service 这一抽象概念,用于对外暴露…

git 命令回退版本

1、查看提交记录 git log --oneline # 简化的提交历史&#xff08;推荐&#xff09; # 或 git log # 完整提交历史2、版本回退 git reset --hard <commit-hash>3、如果已推送过代码到远程仓库&#xff0c;需强制推送更新 git push -f

深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace

一、传统人脸识别方法的发展与局限 1.1 Eigenfaces&#xff1a;主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析&#xff08;PCA&#xff09;的里程碑式方法。其核心思想是将人脸图像视为高维向量&#xff0c;通过协方差矩阵计算特征向量&#xff08;即特征脸&…