| |
|
知识库 -> 数码 -> 据说鸿蒙OS Next改为通过虚拟机跑安卓了,这个方案真的可行吗? -> 正文阅读 |
|
[数码]据说鸿蒙OS Next改为通过虚拟机跑安卓了,这个方案真的可行吗? |
[收藏本文] 【下载本文】 |
[图片] 大家先看图,如果鸿蒙OS Next通过虚拟机运行安卓系统,那么手机中将存在两个独立的系统同时运行。懂计算机常识的都知道,虚拟机是很吃硬件的,… |
在其他系统上运行Android APP是自从Android诞生以来就非常热门的需求, 这里探讨一下各种方案, 以及能否整合到Open harmony OS上. 系统虚拟机 系统虚拟机即模拟虚拟CPU并运行Linux内核, 在Linux内核上为虚拟机虚拟的外设适配Android HAL, 并启动Android操作系统. 案例有: 各种基于VirtualBox的Windows安卓模拟器Windows SubSystem for Android. 使用Hyper-V虚拟化平台+Host Compute System APIGoldFish, 即AOSP官方虚拟机AVD, 使用qemu虚拟机, 对接各个操作系统的虚拟化API.ARCVM, 即ChromeOS Android虚拟机, 使用crosvm虚拟机, 使用KVM和virtio虚拟化设备. 系统虚拟机的CPU性能损失非常低(<5%), 内存性能略有损失(TLB命中率下降, 内存balloon频繁触发), GPU性能有较大损失. 需要注意的是, 普通ARM Soc的Linux内核运行在EL1, 而虚拟机管理器需要EL2权限, 因此除非Soc厂商愿意, Soc上运行的Linux无法使用硬件虚拟化, 会严重影响性能. 虚拟机的GPU的实现有如下几种方案: CPU模拟: 即类似swiftshader的软件光栅, 性能非常差.API转发: 即直接将相关API调用转发给host, 性能较高, 但容易产生虚拟机逃逸的安全漏洞.API编码转发: 像Virtio-GPU和VMWare SVGA这样的实现, 会对API的命令进行编码和检查, 性能高, 安全性也比较高.Native Context: Native Context是Google为crosvm和ARCVM开发的虚拟GPU方案, 允许虚拟机的内核直接对接host的GPU内核驱动drm接口, 虚拟机内也使用物理GPU的用户态驱动. 性能非常高, 安全性也非常高. 该机制非常类似Windows的WSL/WSA的虚拟GPU, 将WDDM的内核接口暴露给Linux虚拟机, 虚拟机内直接运行物理GPU厂商提供的用户态GPU驱动.硬件显卡划分: 部分GPU允许划分出多个单独的PCIE功能, 可以将划分出的PCIE虚拟设备穿透给虚拟机. 只有数据中心GPU和车机专用Soc的GPU支持该功能, 主要用于云游戏和车机Android系统.硬件显卡穿透: 将单独的GPU穿透给虚拟机, 需要额外的GPU硬件. 从Google和微软的实践来看, Native Context是在消费级GPU上构建虚拟机的最佳GPU方案. 如果华为在EL2固件上支持虚拟化, 则可以使用Native Context实现近乎原生的性能. 2. 容器 容器方案不运行单独的VCPU和Linux内核, 而是使用宿主系统的内核, 并在此基础上构建隔离方案. Linux namespace/cgroup. 这是最常用的在Linux上构建容器的方案, 提供了最高的性能, 几乎没有任何性能损失. 普通的Android内核不支持namespace, 注意到Open harmony OS内核启用了namespace功能, 且用于隔离Open harmony OS的应用环境. 创建和切换namespace需要特权, 因此普通的App无法使用该方案. 在Android系统之外, 在GNU/Linux上运行的anbox和waydroid均使用LXC容器, ChromOS的ARC++使用Google自己设计的容器, 也有使用containerd作为容器运行时的方案.gVisor ptrace. gVisor可以使用ptrace拦截所有的系统调用, 并使用代码重定向系统调用. 由于普通App可以调用ptrace系统调用, 许多在Android上运行的所谓Android虚拟机均采用此方案运行. 显而易见, 该方案下系统调用的性能会急剧下降.Linux系统调用模拟. 在非Linux内核上运行Linux程序, 则需要模拟Linux的系统调用. 例如FreeBSD的Linux兼容层, Windows的WSL1及其前身, Windows 10 Mobile的Android兼容层, Fuchsia的Linux/Android兼容层Starnix, 以及原理相似但功能相反的wine. 在这些方案中, FreeBSD和Windows的兼容层位于内核态, 而Starnix和wine是用户态. 考虑到目前HarmonyOS使用容器在AOSP上运行Open harmony OS, 则相反的功能是可以实现的. 但注意到Open harmony OS 4.1的诸多安全功能实际上禁止了这种用法. 3. ART虚拟机级别兼容层 这是Google多次尝试但均失败的方案, 原因均为无法为NDK提供二进制ABI兼容性. 第一次尝试是ChromeOS的ARC, 该方案将Android的dalvik虚拟机编译到NaCl上(类似于WebAssembly), 允许不使用NDK的App运行. 该方案不支持NDK, 因此非常鸡肋, 很快Google切换到基于容器的ARC++方案, 随后又切换到基于虚拟机的ARCVM方案. 第二次尝试是原本的Fuchsia支持Android的方案, 该方案将Android的ART移植到Fuchsia上, 并将NDK移植到Fuchsia, 为NDK程序提供了源码级别的兼容性. 但没有开发者愿意为Fuchsia编译NDK动态库, 因此该方案被放弃, 改为使用Linux兼容层Starnix. 因此该方案无法达到兼容现有App的目的. |
提醒一下,图中这位老兄就是当年提出叠14纳米的那位老兄。 |
如果 HarmonyOS Next 使用 OpenHarmony/Linux 则可以直接运行 Android 程序。 所有 Linux 操作系统都可以直接运行 Android 程序。 Android 是一个基于 Linux 的操作系统。 Android Runtime 是一个基于 Linux 的应用容器。 常说的 Android 虚拟机,或者说 Java 虚拟机,其实不是虚拟机。 他其实是一个应用程序运行环境。 接收一段 Java 程序,并且执行。 Android 虚拟机 只是一个 Linux 程序,提供了标准 Android 程序的执行环境。 理论上任意一个 Linux 操作系统,补齐相关运行时和支持库都可以运行 Android 程序。 当然,不只局限于理论,社区已经将理论付诸实现。 例如 Anbox 之类的社区内容。 没有适配的程序转为虚拟机,大概率就是以讹传讹。 作者既不懂什么是虚拟机,也不懂什么是 Android 运行时。 就像在目前,HarmonyOS 中的 OHOS 就是一个 Linux 容器中的 Linux 程序,用以提供 OHOS 程序运行时一样。 无非是换一个作为主力。 将用户主要应用从 Android 切换到 OHOS 而已。 至于是原生 Android 实现,还是第三方应用容器其实没多大区别。 社区已经玩烂了的东西。 如果 HarmonyOS Next 使用 OpenHarmony/liteOS。 那么确实不能直接运行 Android 程序。 除非像 yunOS 一样,完整的重新实现一遍 Android Runtime 和 Android Framework。 但是就目前而言,完全是吃力不讨好的行为。 如果 HUAWEI 下定决心独立,再投入大量人力物力去搞 Android 兼容层,那么才是真的浪费。 |
可行,当年的BB10就是这么搞的。还有死在测试阶段的WP Android兼容层也是类似的思路。 效率相较于原生运行会差一些,但当年骁龙S4时代就已经能跑动不算特别大的游戏了。以现在的芯片性能,足以保证日常流畅使用。 |
虚拟机方案有些麻烦了,我记得之前有知友研究认为目前的HarmonyOS (特指手机/平板端运行的版本) 是AOSP作为主系统被引导,之后通过containerd的方式启动OpenHarmony容器,实现ART+ArkTS应用运行时共存,我不太清楚这种方式具体是如何优化用户体验的,比如基于ArkTS运行时的“鸿蒙原生应用”,它的渲染到底是在AOSP层面直接进行,即类似于PWA/小程序/快应用的方案,还是放在OpenHarmony容器里渲染好再把画面转发出来?我也没有足够的能力在这方面深入研究,但这种想法理论上确实是可行的方案。 如果上面提出的设想属实,那么我想图中博主所说的“没有适配的应用全部转成虚拟机”,其实是反过来让OpenHarmony跑containerd,将AOSP塞到容器里。OpenHarmony目前有活跃开发的版本均基于Linux内核构建,查阅社区文章可以发现其可以轻松支持容器化特性:OpenHarmony Docker移植实践 - OpenHarmony开发者 - 博客园 (cnblogs.com) ,而容器化AOSP也有成熟的先例:GitHub - budtmo/docker-android: Android in docker solution with noVNC supported and video recording,虽然目前的项目主要依靠VNC转发容器内的画面,但我想以华为整体的技术实力,魔改一个可以和外层OpenHarmony交互的SurfaceFlinger也不是什么难事。 当然,以上回答只是提供一个比虚拟机方案实际一点的猜想,毕竟手机还是比较注重功耗的电子设备,容器方案能比虚拟机方案省一些硬件资源就能很好地提升用户体验,我个人没有再能通过搜索方式找到提出现有containerd方案猜想的原知友,而且猜想也可能与现实中目前HarmonyOS的实现方式存在误差,仅供各位参考。 |
科普一下,现在的win11就是通过虚拟机跑的。现在的行情跟十年前不同了。 win11,wsl2,wsa都跑在并行的虚拟机上。 现在的操作系统不但支持虚拟化,自身直接跑在虚拟机上也没问题。虚拟机的性能的影响,在现代的硬件上,也几乎很难被用户肉眼感知。 我不知道题主想问啥,技术上肯定没问题,完全可行。用户也可以完全没有感知(有人感知win11是跑在虚拟机的吗)。 只不过,如果同为Linux体系,chroot跑就行,连虚拟机都不需要。你看安卓手机跑Ubuntu就是通过chroot跑,不用虚拟机。 所以我的意思是:可以这么做,但没必要。 不过这里,选择使用虚拟机,对用户而言根本不用在意,使用上没区别。 |
技术上肯定可以啊 你看看汽车智能座舱系统高通8155芯片方案,都是QNX系统上面,用hypervisor虚拟机跑安卓作为车机大屏啊 |
虚拟机的方式会非常麻烦。 虚拟机需要实现一套高效的、支持完整硬件直通的虚拟化方案,使得普通用户可以正常使用大多数应用。 哪怕华为拥有极强的虚拟化技术方案,可以以较小的损耗虚拟化cpu和io,但华为的不少手机是高通的soc,高通不一定会为华为提供自家adreno gpu和hexagon dsp等底层硬件的直通支持。导致android侧gpu和ai相关硬件性能较差或直接无法使用。 虚拟机的优势是隔离程度高,安全性好。但是也带来了副作用。 由于隔离程度较高,如果想要在android(guest)应用上调用打开鸿蒙应用( host),将会非常困难。而一旦开洞允许虚拟机内部向外部的调用,那虚拟机的优势便会不存在。 所以大概率不虚拟机,而是android容器。 容器的隔离程度较低,性能较好,能较为简单地访问到物理硬件且不会冲突。 Linux上也有非常成熟的android容器开源方案(比如anbox),华为如果只是想跑起来android应用,可能代码都不用改几行。 但是容器也有自己的问题,如果华为的android容器和Linux内核版本老旧,安全漏洞百出,那么黑客和流氓应用可以用较低成本在攻破android系统后逃逸容器,提权到鸿蒙os。 |
我小米6上实践过Ubuntu Touch+Waydroid,估计鸿蒙Next也差不多。 能用,不卡…… |
理论上华为旗舰机型的运行速度是足够的,跑个安卓软件问题不大。和现在旗鱼系统的差不多,或者ubuntu touch的waydroid。 不过nova11se和畅享70这种应该没虚拟机,或者就停在鸿蒙4.0,要不本来就卡出翔,用虚拟机更是卡得连翔都出不来。 |
这条微博本身就有问题。 因为安卓本身就是跑在Java上,准确的说,Java的兼容性就是在于他运行在虚拟机里。 而且,如果类似是模拟器的虚拟机,那确实是可能产生性能的损耗。 但如果是另一种呢?也就是Java这种虚拟机的话,可能是不会造成性能消耗的。 是不是有点绕?模拟器这种,他是一个系统上跑了另一个系统。 Java虚拟机这种,那就是虚拟机里面有一个runtime,这个runtime支持应用的运行。(可能描述不准确) 所以安卓的性能其实一直属于拉胯的那种,刚出来的时候,打不过苹果的object-c,也打不过像MeeGo那种直接用cpp开发的。 哎,习惯性跑题了。 前几天突然想到个事情。鸿蒙不还是有个Linux内核鸿蒙么?要知道安卓以前也是Linux发行版。 那如果,我是说如果。华为在Linux鸿蒙开发过程中,参考安卓的Linux开发,包括文件架构一致。跟国内top级应用也做好沟通,确保配置文件,数据文件的位置。 更新的时候跑一个shell脚本,类似于Windows的启动项,引导到鸿蒙那个内核。在鸿蒙内核时,又把安卓内核干掉。反正文件结构一致,读数据应该没问题。又因为华为应该把运行安卓的虚拟机吃透了,所以可以直接运行在Linux鸿蒙上。 说的有点语无伦次,请见谅。希望有人理解我想说啥吧。 总之,如果这个所谓的纯血鸿蒙是基于Linux改的,那我真是无话可说。 搞得这么轰轰烈烈,搞半天是Linux二开。 以后可以学华为狂信徒对于华为被制裁找理由一样,改改话术。以前是套壳安卓,以后是套壳Linux。 当然,这是我的猜想。锤还是要等这个纯血上架,被大佬拆包吧。 |
等等,不是说明年(现在应该是今年了)就要发布吗?就算12月30日发布,那也只有不到12个月了,微软搞Win11的虚拟机安卓兼容模式他两年多才搞定呢。 总不会是直接套个Linux版的VirtualBox吧? 另外,以现在智能手机内卷的程度,虚拟机跑安卓的性能损失真有人能接受? 期待小刘同志到时候再出一期深扒 小刘不是程序员的个人空间-小刘不是程序员个人主页-哔哩哔哩视频 |
冷知识:安卓 13 自己也内置了一个 pKVM 虚拟机,虽然目的是创建一个可信代码执行域,但确实可以在上面运行完整的操作系统。 |
这么说吧,电脑各种硬件够强了吧,安卓模拟器里的app都兼容了吗?时不时就有bug问题。兼容性问题会搞死程序员的 |
之前传不兼容,现在又说兼容,到底是兼容还是不兼容,能不能给个准话? 评论里面不少人给我科普Windows装Android虚拟机也不代表Windows是Android,这个是陷入技术困境。我个人理解是,操作系统最重要的是生态,如果一个系统没有自己的生态,只能依附其它系统的生态而存活,那么即便是底层完全自主,也算不上自主系统,好听一点是类某某系统。 再举一个例子,假如我那天买Windows系统电脑,主力使用的软件,不再是Windows原生软件,而是Android版,那在我看来Windows就是一个类Android系统…底层啥的都不是关键 |
哪个二货跟你说的 虚拟机是很吃硬件的,尤其是CPU和内存,安卓系统没有个4G内存,保证流畅运行是很吃力的。再加上虚拟机有性能损耗,流畅度更难以保障 ? 没一个字是对的 |
华为手机推出鸿蒙系统的决定引起了广泛关注和讨论。这一新系统据称将具备更好的安全性和性能优势,以及更灵活的应用开发环境。然而,由于鸿蒙系统与安卓系统应用不兼容,用户可能会担心这是否会影响他们的手机使用体验。 首先,我们需要认识到鸿蒙系统的推出意味着华为正在尝试摆脱对美国技术供应的依赖,尤其是谷歌的安卓系统。这对于华为来说是一个重要且必要的举措,因为美国政府对华为的制裁和限制已经对其手机业务造成了不可忽视的影响。因此,华为选择发展自己的操作系统是为了确保其产品的可持续发展。 然而,对于那些已经习惯使用安卓系统的用户来说,鸿蒙系统与安卓应用的不兼容可能带来一些不便。许多用户会考虑到自己是否可以继续使用他们之前在安卓系统上下载的应用,以及是否能够享受到同样的功能和体验。这确实是一个重要的问题,华为需要在推出鸿蒙系统之前提供一些具体的解决方案。 一种解决方案是通过应用鸿蒙开发套件(HDK)让开发者重新开发他们的应用以适应鸿蒙系统。这需要华为与开发者建立更紧密的合作关系,提供相关的技术支持和培训,以确保更多的应用能够在鸿蒙系统上运行。 另一种可能的解决方案是通过虚拟机技术来兼容安卓应用。鸿蒙系统可以提供一个虚拟机,使得用户能够在鸿蒙系统上运行安卓应用。虽然这可能会带来一些性能上的损失,但这是一个过渡期的解决方案,能够让用户在不丢失应用的情况下逐步适应鸿蒙系统。 最后,我们不能忽视的是,用户对安全性和隐私保护的关注。鸿蒙系统可以通过更好的安全性设计来提供更高的保护水平。华为需要明确向用户解释和展示鸿蒙系统在这方面的优势,以消除用户的担忧。 总的来说,虽然鸿蒙系统与安卓应用的不兼容可能会在一开始对用户造成一些不便,但随着时间的推移,华为有望通过与开发者的合作和技术创新来解决这个问题。对于华为来说,这个决定对于其长期发展和技术独立性具有重要意义,同时用户也应该为了体验新系统所带来的优势和改进而做好适应的准备。 |
不太懂你说的是什么方案,但Android本身自己就是跑在Dalvik虚拟机里,鸿蒙之前版本估计也是自己实现了一个Dalvik,现在next版本继续使用或直接抛弃,拭目以待呗 |
我认为题主的意思是鸿蒙NEXT不会兼容安卓。以前是根本就不能运行安卓程序,以后可能会换一种方式。比如华为官方提供一个鸿蒙系统的应用程序,这个应用程序类似于windows里的vmware或者virtualbox,这个应用程序里可以运行安卓程序。因为安卓程序本身就是以这种方式运行在linux系统里的,所以换成运行在鸿蒙系统里不一定会慢多少。另外这本来就是补充,鸿蒙就没打算让你好好用安卓程序。只有那些实在不能在鸿蒙里运行的程序才会考虑这种方式,所以慢点也好,就逼着用户抛弃安卓程序。 |
虚拟机会造成一定的性能损失。目前的安卓本身就是在Runtime里运行的。再加一层虚拟?这是绝对不可能的。 |
不仅可行,而且如果 Harmony OS Next 的内核本质上如果是一个自研的 Type 1 Hypervisor,然后把 AOSP 这个 Host OS 放在 VM 0 里面,将涉及到 Host 外设的部分尽可能都直通 VM 0 让 Hypervisor 委托 VM 0 完成外设资源的处理,这样的话其实还能做到外表一点变化都没有的情况。 但事实上,这确实是实现了自研操作系统内核,当需要运行硬实时或者可信任务的时候可以直接让 Hypervisor 创建一个独立的任务优先级更高的虚拟机完成相关事务,自主可控和已有生态都可以很好的获得。 当然类似的做法,也是有成功实践的,那就是微软的 Hyper-V,启用 Hyper-V 后,Host OS 跑在 VM 0 里面,当然 VM 0 里面最近几年也能跑 Linux,毕竟微软前段日子为了实现 Xbox One 云游戏机,服务器用的 Xbox One 风格的硬件架构,那群人既希望能畅用 k8s 进行集群调度,又不希望给 Xbox One 风格的架构实现 Linux 硬件支持,于是整出了名为 mshv 的 Linux 内核模块让 Linux 能以 VM 0 运行,相关补丁试图推到 Linux 主线貌似主线不感兴趣,但相关细节还是开源了。Xbox One 本身借助 Hyper-V 的 Xbox NanoVisor 变种实现安全隔离还有快速恢复等特性。 毛利 |
华为是否会采用通过虚拟机运行安卓系统的方案,是一个有争议的问题。一些人认为,如果鸿蒙OS Next通过虚拟机运行安卓系统,那么可以实现两个系统的隔离,提高系统的安全性和稳定性。而且,随着技术的不断发展,虚拟机的性能和效率也在不断提高,因此这种方法是可行的。 然而,另一些人则认为,采用虚拟机运行安卓系统会给硬件带来更大的负担,尤其是对于一些性能较低的老旧设备来说,可能会影响手机的流畅度和续航能力。此外,虚拟机还需要占用更多的存储空间,对于一些存储容量较小的手机来说,可能会影响手机的存储容量。 至于华为是否有秘方可以实现虚拟机低内存占用和高效运行,这需要看华为的技术实力和创新能力。如果华为能够通过优化虚拟机的设计和实现,提高虚拟机的性能和效率,同时降低内存占用和存储空间占用,那么这种方法还是可行的。但是,这需要华为在技术上进行大量的研发和创新,是一项具有挑战性的任务。 总之,采用虚拟机运行安卓系统的方案是有争议的,需要结合具体的技术实现和市场情况来考虑。如果华为能够在技术上进行大量的研发和创新,实现虚拟机低内存占用和高效运行,那么这种方案还是可行的。 |
|
|
谢邀,不谈技术,鸿蒙OS Next再碰安卓就是耻辱。HarmonyOS1-4为了搞兼容安卓已经很给面子了,再兼容就说不过去了 |
虚拟机方案要是可行,现在鸿蒙OS版本号已经推进到4了,他为啥还不采用? |
如果是Intel Ultra的话,在Windows 11中跑安卓虚拟机肯定很快, 从计算机原理上说,移动端CPU的运算速度没法优化得比Intel Ultra快。 但一切障碍都不能成为桎梏鸿蒙得枷锁,相信鸿蒙一定能突破任何物理法则的限制。 |
在知乎上肯定不可行,知乎上大神太多了,随便拎出来一个都能秒杀华为的攻城狮。 要是挑几个厉害的,华为的全部人加起来都比不了。 |
图啥呢? 我为啥不直接买个安卓手机呢? 就为了支持人家在加拿大买大house? |
兼容层跑安卓,效率太低,如果华为只要能实现低损耗兼容层跑安卓,把这一套用在自家电脑上,可以血洗整个pc市场。 |
软件白纸特征明显。 |
这是肯定的啊,之前我就说过了。 鸿蒙可以做到不兼容安卓,但是他现在绝对还是要变相的使用安卓的。虚拟机是最佳选择。 反正什么话都让他说完了。 |
|
[收藏本文] 【下载本文】 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
娱乐生活:
电影票房
娱乐圈
娱乐
弱智
火研
中华城市
印度
仙家
六爻
佛门
风水
古钱币交流专用
钓鱼
双色球
航空母舰
网球
乒乓球
中国女排
足球
nba
中超
跑步
象棋
体操
戒色
上海男科
80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联 |
网站联系: qq:121756557 email:121756557@qq.com 知识库 |