卓易通:鸿蒙Next系统的蜜糖还是毒药?
哈喽,我是老刘
最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。
老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。
使用体验
性能
看到了一些测评,特别是有人直接就跑分的👍
总体来说从跑分来看性能是鸿蒙原生的93%,基本是容器的平均水平,性能损失不大。
但是其它方面的表现就比较糟糕了。
内存
这个Android运行时的容器本身运行需要8G左右内存。
所以没有16G内存的丐版手机,就不要想运行什么大程序了。
功耗
不少网友评价手机容易发烫,就是功耗高的表现。
其实这也很好理解,在一个系统上持续运行另一个系统的容器,同时又想做到性能没有大幅损失,就只能通过持续的高功耗来弥补了。
同时要注意,高内存占用和高功耗不仅仅影响容器内运行的Android应用,也会对原生应用造成影响。
原生应用的可用内存减少,cpu持续被容器占用,会出现使用时比较卡顿甚至异常等现象。
当然手机续航也会大幅下降。
用户体验
也有不少用户反馈bug较多。
我想这一方面和容器本身的兼容性有关,另一方面也和内存、功耗的问题有关。
在高功耗、内存吃紧的情况下很多手机App都会出现一些问题。
总体来说使用体验是能用,但是不好用。
换句话说就是比较适合临时应个急,作为日常使用不推荐,除了bug还会造成续航的下降。
底层原理
前面我们提到整体的性能损失不大,由此也可验证不是采用的虚拟机方案。
但是其实这种技术方案也不完全算是很多人说的容器技术,我的理解是类似WSL2这样的介于容器和虚拟机之间的一种轻量级虚拟技术。
接下来我们把几种在一个系统上运行另一个系统应用的方案对比看一下就比较清晰了。
虚拟机
虚拟机是通过在系统中模拟一个完整的硬件环境来运行目标系统或应用程序。
假设是使用虚拟机来运行Android应用,那就是如下的结构。
运行Android应用时,虚拟机将完整的Android系统部署在虚拟的手机硬件之上,通过动态翻译将指令映射到鸿蒙系统的底层架构。
我们先来看一下一个普通Android App的运行架构
如果在一个虚拟机里面运行,则整体架构如下:
从架构上就可以看出来,虚拟机的优缺点都很明显。
优势
- 强隔离性:虚拟机通过独立的运行环境与宿主系统隔离,可以提供更高的安全性。
- 兼容性强:能够在宿主系统上原生支持几乎所有的Android应用,无需对应用进行修改。
劣势
- 性能开销:由于需要模拟硬件和运行时环境,虚拟机通常会带来较高的资源占用和性能损耗。
- 启动时间较长:虚拟机初始化过程复杂,启动速度相对较慢。
但是在卓易通这种场景中,我们不需要虚拟出一套不同的手机硬件,因为这样的开销太大了。
能否让虚拟系统和宿主系统共用一套硬件呢?
这种方案也是有的,就是轻量级虚拟化技术。
轻量级虚拟化
这种技术方案的典型代表是微软的Linux子系统,下面简称为WSL2。
简单来说,WSL2 在 Windows 上运行了一个 Linux 内核,但它不虚拟硬件。
WSL2 利用虚拟化技术(如 Hyper-V)提供内核隔离,同时通过与 Windows 系统的深度集成,消除了传统虚拟机与宿主系统之间的隔阂。例如,文件系统操作、网络共享和进程调用的性能和用户体验更加接近原生应用。
架构示意图如下:
它具有如下特点:
- 虚拟化但非硬件仿真:
- 使用轻量虚拟化运行 Linux 内核。
- 不模拟硬件,而是直接利用宿主机的硬件资源。
- 高效的系统调用桥接:
- Linux 应用直接调用 Linux 内核,而 WSL2 的内核通过微软的接口与 Windows 通信。
- 比传统虚拟机更高效,部分性能接近原生运行。
- 用户体验类似容器:
- 提供快速启动、轻量运行的体验。
- 与 Windows 文件系统无缝交互,支持共享资源。
API兼容层
轻量级虚拟化方案的性能虽然比虚拟机要高很多,但是仍然有中间商。
Hyper-V向上提供的仍然是虚拟的cpu和内存,并且Linux内核本身也会占用大量的cpu和内存资源。
那能否直接在宿主运行时上运行另一个系统的应用呢?
这种方案也是有的。
典型的代表就是Linux上的Wine,可以直接在Linux上运行windows的exe程序。
Wine(Wine Is Not an Emulator)是一个兼容层,它允许在 Linux、macOS 或其他 Unix-like 系统上运行 Windows 程序。
它通过直接将 Windows API 调用转换为对应平台的本地系统调用,从而让 Windows 应用程序能够在非 Windows 系统上原生运行。
架构如下:
Wine 的优点
- 较高的性能:
- 无虚拟化开销:Wine 直接将 Windows API 调用转换为宿主操作系统的调用,因此它没有虚拟机或容器那样的额外性能开销。这使得 Wine 运行 Windows 应用程序时通常具有接近原生 Windows 系统的性能。
- 运行效率:由于没有模拟硬件或操作系统,Wine 的效率通常比虚拟机(如 VMware 或 VirtualBox)和 WSL2 更高。
- 较小的资源消耗:
- 低资源占用:Wine 不需要像虚拟机那样模拟整个硬件环境,也不需要运行完整的操作系统。因此,它消耗的资源(如 CPU 和内存)相对较少,特别适用于资源有限的系统。
- 启动速度快:Wine 启动 Windows 应用程序的速度比虚拟机或 WSL2 要快,因为它不需要启动一个完整的虚拟操作系统。
Wine的缺点
- 兼容性问题:
- 并非所有 Windows 应用程序都兼容:Wine 并不是完美的 Windows 兼容层,并非所有 Windows 应用程序都能顺利运行。尽管 Wine 对许多应用有良好的兼容性,但一些复杂的应用(尤其是需要底层硬件访问的程序,如一些游戏或专业软件)可能无法正常工作。
- 有限的驱动和 API 支持:Wine 并不完全实现 Windows 的所有 API,它仅支持大多数常见的 Windows 调用。对于一些高级功能或特殊硬件支持(如 DirectX 或某些图形加速功能),Wine 的支持可能不足。
- 图形和多媒体支持较弱:
- 图形性能问题:尽管 Wine 支持 DirectX 和 OpenGL 的映射,但与 Windows 原生运行时相比,图形性能可能较差,尤其是在图形密集型应用程序(如 3D 游戏、图形设计软件等)上。Wine 的 DirectX 到 OpenGL 转换可能会影响渲染性能。
- 有限的硬件加速支持:Wine 不能直接访问硬件加速功能(如 GPU 加速),因此在需要高度图形渲染的应用程序中,它的表现可能不如 Windows 原生环境。
卓易通的方案
前面介绍了目前主流的跨平台运行App的方案,那么本文的主角卓易通采用的是哪一种呢?
卓易通采用了华为自家的iSulad容器。
事实上卓易通技术方案和前面介绍的WSL2比较类似。
可以看到,因为鸿蒙内核兼容Linux ABI(应用程序二进制接口),而Android内核又是基于Linux内核修改的。
所以可以直接在鸿蒙内核上跑一个定制的Android 运行时。
当然这里没有完整的Android内核功能,所以前面说的一些兼容bug也有可能是这个原因导致的。
可能很多不是从事Android开发的同学对这个运行时没有什么概念,来看下面这幅图:
图中用红色框起来的部分都是本文提到的Android运行时的内容。
或者我们可以这么理解,一个Android App能运行起来,这里面的大部分内容都需要。
所以也就能理解,为啥只是把卓易通跑起来就需要大约8G的内存了吧?
而这里面有很多东西是需要常驻后台,实时响应用户及APP请求的,这也是为什么卓易通会造成持续的功耗和发热。
前面我们介绍了想在一个系统上运行另一个系统的应用都有哪些方案。
并且基于此介绍了卓易通的技术方案的特点。
相信到这里大家对卓易通到底是啥东西有一定的了解了。
那么接下来我们来看看推出卓易通和出境易两款应用,通过虚拟化方案兼容Android生态后对鸿蒙生态会有哪些可能的影响?
蜜糖还是毒药?
妥协
鸿蒙目前声称有1.5万应用。
这些应用相对于其对应的Android版本来说,有多少比例的功能看看微信就大概能知道。
而即便不考虑功能的覆盖率,1.5万的数量对于用户来说还是太少了,完全无法支撑日常的使用。
下图是2023年的数据,这个数据中还不包含大量没有上架应用商店的App。
以我自己为例,老刘手机上安装了很多开源或者开发工具配套App,这些应用大多都没有上架应用商店。
这里面的原因就不多说了😮💨
总之想支撑大量用户日常使用,没有足够基数的应用数量是不行的。
所以兼容Android应用,让运行鸿蒙 next系统的手机至少能满足日常的使用,就是一个不得不做的妥协。
副作用
本来对于公司或者团队来说,现在的形式不缩减人手就不错了,还要额外增加一个鸿蒙开发的成本?
除非可以看到明确的收益,比如足够大的用户数量,否则是没有动力去开发的。
现在有了卓易通可能开发的动力就更小了。
这让我想起来当年黑莓手机也能兼容Android应用,最后自身生态也没有发展起来。
这里还不得不提一个迷之操作:
纯血鸿蒙上架的应用卓易通里面无法安装,而出境易则只能安装白名单内的应用。
相当于我好不容易开发了一个鸿蒙版App,但是因为人手不足功能一时不全,现在用户还没法用我的Android版。
那我干脆就不开发鸿蒙版好了,这样用户至少还能用一下完整功能的版本。
所以这个决策就给人一种不得不妥协又放不开的感觉。
鸿蒙生态的未来
老刘作为一个在一线的开发者,我做过架构师也带团队,所以我一直以来都很关注成本问题。
当前的形式下,很多公司的客户端团队Android和ios都只剩一个人了。
即使还保留建制的团队,再增加一个鸿蒙开发组也很难。
所以想要让鸿蒙生态快速增长,最有效的办法就是大力发展Flutter这样的跨平台框架在鸿蒙上的兼容性。
如果一个团队、一套代码可以同时开发Android、iOS和鸿蒙三套系统,并且都能提供原生级的用户体验,那是不是前面的问题都可以有效的解决呢?
目前据我所知有不少基于Flutter鸿蒙定制版本的应用已经上架了。
这里也希望基于鸿蒙系统的Flutter生态能快速健全起来。
总结
本文介绍了纯血鸿蒙版本卓易通和出境易两款应用中运行Android App的体验和运行原理。
同时分析了在这个虚拟环境下运行Android应用对于鸿蒙生态的一些看法。
个人观点Flutter这样的跨平台框架才是鸿蒙生态快速增长的关键。
如果看到这里的同学有学习Flutter的兴趣,欢迎联系老刘,我们互相学习。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》https://mp.weixin.qq.com/s?__biz=MzkxMDMzNTM0Mw==&mid=2247483665&idx=1&sn=56aec9504da3ffad5797e703c12c51f6&chksm=c12c4d11f65bc40767956e534bd4b6fa71cbc2b8f8980294b6db7582672809c966e13cbbed25#rd
相关文章:

卓易通:鸿蒙Next系统的蜜糖还是毒药?
哈喽,我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…...

AI大模型学习笔记|神经网络与注意力机制(逐行解读)
来源分享链接:通过网盘分享的文件:详解神经网络是如何训练的 链接: https://pan.baidu.com/s/12EF7y0vJfH5x6X-0QEVezg 提取码: k924 内容摘要:本文深入探讨了神经网络与注意力机制的基础,以及神经网络参数训练的过程。以鸢尾花数…...

Linux 操作系统中的管道与共享内存
目录 一、匿名管道 (一)基本概念 (二)关键现象 (三)管道特性 二、命名管道 (一)基本概念 (二)关键特性 三、共享内存 (一)基…...

恢复删除的文件:6个免费Windows电脑数据恢复软件
数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。您可以使用这些文件恢复软件来检索文件、文档、视频、图片等。这些应用程序支持多种标准文件格式,如 PNG、RTF、PDF、HTML、JPG、MP3 等。 经过超过 75 小时的研究,我分析了 25 最佳免费数据…...

linux网络编程 | c | select实现多路IO转接服务器
select实现多路IO转接服务器 基于该视频完成 15-select实现多路IO转接设计思路_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 select实现多路IO转接服务器1.思路&功能2.代码实现warp.hwarp.cmulti_select_sever.c运行图 3.代码解释(细节…...

基于前后端分离的食堂采购系统源码:从设计到开发的全流程详解
本篇文章,笔者将从系统设计到开发的全过程进行详解,帮助开发者和企业了解如何高效构建一套完善的食堂采购系统。 一、系统需求分析 在开发一套基于前后端分离的食堂采购系统前,必须对业务需求和功能模块进行详细分析,确保系统设…...

小程序自定义tab-bar,踩坑记录
从官方下载代码 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1、把custom-tab-bar 文件放置 pages同级 修改下 custom-tab-bar 下的 JS文件 Component({data: {selected: 0,color: "#7A7E83",selectedColor: "#3…...

游戏引擎学习第52天
仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中,实体被分为不同的类别:接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理,接…...

【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

【HTML】根据不同域名设置不同的网站图标(替换 link 中 href 地址)
文章目录 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"x-ua-compatible" content"ieedge,chrome1" /><meta name"viewport" content"widthdevice-width&q…...

使用Navicat从SQL Server导入表数据到MySQL
在表上右键选择导入向导 选择ODBC 1.内输入ip即可,不需要端口号 一定要勾选允许保存密码 选择需要的表,下一步 根据需求,可修改表名、是否新建表 根据需求修改不同表的字段类型和长度 按需选择导入方式...

私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?
当云计算席卷而来,基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署(On-premises)和公有云部署(Public Cloud)之间,不断融合的混合IT(Mixed IT)形式成为最常见的企业级…...

牛客网 SQL1查询所有列
SQL1查询所有列 select id,device_id,gender,age,university,province from user_profile 每日问题 C 中面向对象编程如何实现数据隐藏? 在C中,面向对象编程(OOP)通过封装(Encapsulation)实现数据隐藏。…...

【经验分享】OpenHarmony5.0.0-release编译RK3568不过问题(已解决)
问题描述 根据操作手册正常拉取代码,然后编译OpenHarmony5.0.0版本rk3568项目 编译命令 ./build.sh --product-name rk3568 --ccache出现如下报错 然后真正开始出错的位置是下面这句log FAILED: ../kernel/src_tmp/linux-5.10/boot_linux ../kernel/checkpoint/c…...

如何使用ERC404协议
ERC404 ERC404协议的性质 ERC404不是一个开发代码工具包,而是一种智能合约标准规范。它就像是一份蓝图或者规则手册,规定了在以太坊区块链上开发特定智能合约应该遵循的接口、函数和事件等规则。如何使用ERC404协议 定义合约接口 首先,在开发智能合约时,要根据ERC404标准定…...

240004基于Jamva+ssm+maven+mysql的房屋租赁系统的设计与实现
基于ssmmavenmysql的房屋租赁系统的设计与实现 1.项目描述2.运行环境3.项目截图4.源码获取 1.项目描述 该项目在原有的基础上进行了优化,包括新增了注册功能,房屋模糊查询功能,管理员和用户信息管理等功能,以及对网站界面进行了优…...

ORACLE RAC ADG备库报错ORA-04021: timeout occurred while waiting to lock object
问题:核心的灾备 RAC ADG 备库,这两天频繁重启,并且报如下错误,通过查看MOS,发现是个BUG ADG备库的ALERT错误日志如下: Errors in file /u01/app/oracle/diag/rdbms/hxxxsz/hxxxsz1/trace/hxxxsz1_lgwr_69…...

CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置
在CANoe中创建网络节点作为以太网主机时,可以给其配置独立的TCP/IP Stack。 配置的协议栈有一些底层配置参数可以在界面上设置或修改,比如: MTU上图中MTU显示500只是图形界面显示错误,正确值是1500。 TCP延迟确认这些参数也可以通过CAPL动态配置,甚至CAPL还可以配置很多界…...

git使用教程(超详细)-透彻理解git
一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉,我们要重新认识本文所讲述的所有概念。 1.worktree worktree是一个目录,你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree必须要与一个…...

【2024 Dec 超实时】编辑安装llama.cpp并运行llama
首先讲一下环境 这是2024 年12月,llama.cpp 的编译需要cmake 呜呜呜 网上教程都是make 跑的。反正我现在装的时候make已经不再适用了,因为工具的版本,捣鼓了很久。 ubuntu 18 conda env内置安装。 以下是可以完美编译llama.cpp的测试工具版…...

Docker介绍、安装、namespace、cgroup、镜像-Dya 01
0. 容器简介 从生活上来说,容器是一种工具,可以装东西的工具,如衣柜、背包、行李箱等等。 从IT技术方面来说,容器是一种全新的虚拟化技术,它提高了硬件资源利用率,结合k8s还可以让企业业务快速横向扩容、业…...

docker 搭建自动唤醒UpSnap工具
1、拉取阿里UpSnap镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/upsnap/upsnap:4 2、创建docker-compose.yml文件,进行配置: version: "3" services:upsnap:container_name: upsnapimage: crpi-k5k93ldwf…...

3D一览通在线协同设计,助力汽车钣金件设计与制造数字化升级
汽车行业已迎来智能化的汹涌浪潮,在此背景下,零部件制造商唯有积极应对,以智能制造为核心驱动力,方能跟上行业发展步调,在激烈的市场竞争中抢占先机。作为整车制造不可或缺的核心组件之一,汽车钣金件亦需紧…...

基于Matlab实现三维地球模型(源码)
利用MATLAB强大的图形处理能力和数学计算功能构建的可视化应用。这个模型允许用户在三维空间中观察地球,并且能够动态地旋转地球模型,同时还可以模拟卫星在其周围的运动轨迹,为学习地球科学、天文学以及航天工程等领域提供了一个直观的教学工…...

【Tomcat】第五站:Servlet容器
Tomcat启动后,获取到项目当中所有的servlet的WebServlet中的配置信息。将配置信息和类对象都写入一个map集合当中。 map就是一个key-value类型的集合。 在MyTomcat中我们获取到了类对象和注解值。 Tomcat与请求连通 1. ServletConfigMapping 1. 创建一个config包…...

CTF 攻防世界 Web: FlatScience write-up
题目名称-FlatScience 网址 index 目录中没有发现提示信息,链接会跳转到论文。 目前没有发现有用信息,尝试目录扫描。 目录扫描 注意到存在 robots.txt 和 login.php。 访问 robots.txt 这里表明还存在 admin.php admin.php 分析 在这里尝试一些 sql…...

【SpringBoot中MySQL生成唯一ID的常见方法】
SpringBoot中MySQL生成唯一ID的常见方法 在Spring Boot中,为MySQL生成唯一ID有多种方式,每种方式都有其特定的概念、优越点和使用场景。以下是详细的说明和代码示例: UUID 概念: UUID(Universally Unique Identifier࿰…...

使用Flink CDC实现 Oracle数据库数据同步的oracle配置操作
使用Flink CDC实现 Oracle数据库数据同步的oracle配置操作,包括开启日志归档和用户授权。 flink官方参考资料: https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/oracle-cdc/ 操作步骤: 1.启用…...

c++作业7
模拟一个游戏场景 有一个英雄:初始所有属性为1 atk,def,apd,hp 游戏当中有以下3种武器 长剑Sword: 装备该武器获得 1atx,1def 短剑Blade: 装备该武器获得 1atk,1spd 斧头Axe: 装备该…...

vue 上传组件 vxe-upload 实现拖拽调整顺序
vue 上传组件 vxe-upload 实现拖拽调整顺序,通过设置 drag-sort 参数就可以启用拖拽排序功能 官网:https://vxeui.com/ 图片拖拽排序 <template><div><vxe-upload v-model"imgList" mode"image" multiple drag-sor…...