人文艺术 > 方舟编译器需要安装吗,还是系统升级后自带的?

方舟编译器需要安装吗,还是系统升级后自带的?

2020-09-17 15:42阅读(67)

方舟编译器需要安装吗,还是系统升级后自带的?方舟编译器是什么,怎么才能安装呢?:谢邀!首先方舟编译器目前还只是存在于华为的系列手机之中,暂时没有开源的

1

谢邀!

首先方舟编译器目前还只是存在于华为的系列手机之中,暂时没有开源的一个需求,也就是说只有华为的部分旗舰手机才能够享受到方舟编译器的这个功能。



对于后续华为自己的操作系统出来之后普遍搭载方舟编译器,而华为又能否将这个功能开源,还是个未知数,首先这作为华为主打差异化的一个核心功能,我个人是认为,在其为华为取得绝对的领先优势之前,基本上是不会去开源的。

即便是对于华为手机来说,也不过是部分的旗舰手机能够率先使用,后续的老款手机还要经过很长时间的等待,包括一系列的适配之后才能够使用,目前能够首批使用这款手机的也不过七八款包括mate20系列,p30系列以及荣耀magic系列和荣耀数字旗舰系列。



所以在华为可操作系统出来之前,其实这个还是目前华为手机主打差异化的一个最大亮点,因为方舟编译器的效率实在是不错,也就是说能够有效的提高安卓在运行时候的速度,包括打开第三方应用的速度,这让本来在流畅度上与IOS有差距的安卓,简直就是插上了翅膀。

即便我们说按照华为的说法,这个方舟编译器在效率上只能够达到他们官方宣称的60%左右,其实流畅度都已经提升了不少,我们知道目前由于渲染机制和安卓整个生态不规范的原因,本身上其实与苹果手机存在着可能肉眼能察觉到的流畅体验差距,那如果方舟编译器能够做到60%,其实就已经大幅度缩小了这个差距。



当然,假如华为的操作系统在问世之后需要大力的推广,而去做开源的话,那么其实大多数用户也是有可能通过华为的开源操作系统而享受到方舟编译器的效果,我个人觉得这个功能还是非常值得推荐的,当然我自己所使用的magic系列目前还没有得到,大批量的推送还在内测之中。

2

关于华为方舟编译器的相关信息,在2019年4月11日的华为P30系列发布会上就已经讲得比较清楚了。由于是首次面世,大家存在的疑问较多,特别是对于普通用户来讲,懂得的就更少了,今天针对这个问题,给大家讲讲方舟编译器。

1、什么是方舟编译器,如何提升性能

在介绍方舟编译器前不得不先说说安卓操作系统。都知道在安卓系统上面运行应用程序有一个通病,那就是效率低。对此,安卓也经过多个版本的迭代,做了多次改善,但都无法达到最佳效果。安卓应用程序是运行在java虚拟机上面的,程序在运行前,需要先将代码编译为机器可识别的指令,然后再执行。就会出现在程序运行前机器有较多的工作要做,所以就存在效率低的问题了。

而华为方舟编译器的优势在于,绕过了java虚拟机。方舟编译的的做法是,将编译过程放到了应用程序开发端,也就是说,当开发者完成程序开发后,打包前就将程序编译为机器可识别的语言。然后将应用商家到应用商店,用户安装的就是已编译好的程序了,打开即可直接运行。

与此同时,在方舟编译器的环境下,由于改善了内存回收机制,采用随时用随时回收的方式,从而大大提升了手机性能。

2、用户手机上需要安装方舟编译器吗?

目前,方舟编译器是在华为的EMUI9.1系统内置,华为手机用户如果能成功更新到支持方舟编译的版本就有该功能。方舟编译器是属于系统组件部分的应用,所以,并不是所有手机都可以直接安装的。对于华为方面,需要进行大量测试、完善后才会支持更多机型。而且,对于华为自主品牌的支持都需要很多时间去处理,所以,其他品牌的手机可能会更晚才能支持。

所以,不管是华为的手机用户,还是其他品牌的手机用户,只有在官方通知说支持方舟编译器,更新系统完成升级以后,才会有方舟编译器的功能。用户不用直接安装方舟编译器。


前面我们讲到,方舟编译器是让应用在开发完成后、打包前编译程序。所以,若是开发者的话,应该会有对应的开发端工具,这个工具会安装在开发这的开发环境下的。而作为用户的话,就不用考虑这个,只需要使用程序即可。

3、方舟编译器是否会开源?

当时在P30发布会上,余承东讲解完方舟编译器就提到过在2019年就会实现全面开源,并呼吁广大应用开发商尽早使用。

我们知道,如今华为计划发布自主研发的手机操作系统。对于方舟编译器的开源,其实也是为了将来构建软件生态。据华为方面的讲解,开发商对于新系统的支持,并不会增加太大开发成本,只需在原有程序基础上,增加对方舟编译器的编译打包即可。

现在扔出于内测状态,并未完全开放,但大部分华为(含荣耀)的手机都可以更新到EMUI9.1,并且支持方舟编译器。我的荣耀手机已经体验了二十多天了,总统感觉性能方面确实有所提升,除了耗电有点快之外,其他的问题并不多。

3

感谢您的阅读!

方舟编译器到底是什么?有的人认为它是App,只要安装以后,手机就能迅速提升性能,提升应用响应速度;有的人认为它是系统,觉得它是和安卓系统一样的系统,通过刷机才能使用。

然而,方舟编译器不是手机的APP,也不是和安卓系统一样的操作系统。它是一种编译器,通过对底层系统进行静态编译,提升流畅度。在下图可以看到:

  • 现有的安卓系统通过源程序打包成APK, 然后在手机中进行安装运行。在运行过程中通过解释器和JIT进行逐句解释,并且进行逐段的编译执行,通过复杂的编编译编执行,完成指令。
  • 而方舟编译器在源程序阶段就对APK进行了静态的编译。然后在安装到手机后,直接运行,不需要进行编译。

所以,方舟编译器可以提升Android系统内应用的编译效率,使用方舟编译器最终将提升24%的系统操作流畅度,提升44%的系统响应能力,以及提升60%的三方应用操作流畅度,在测评中,20款应用打开时间,荣耀20Pro94秒。更为关键的是,在前5名中华为p30系列业在其中。

方舟编译器是在系统升级到EMUI9.1后,华为已经将华为的系统进行了新的编译。而第三方应用需要后期开发商使用方舟编译器编译才能使用,目前只有微博极速版,不过随着时间的推移,我们相信越来越多的App,将会使用方舟编译器进行编译,我们打开应用的速度会提升!

4

看了下面不少朋友的回答,大部分都答偏了。

首先亮结论:方舟编译器不会安装在消费者的手机上。

下面来从以下几个维度说明原因。

1. 编译器是什么?

首先要明确的是:编译器是一个通用概念,它不是仅仅针对手机,最早它的对象是计算机。

编译器就相当于一个翻译官,它的作用就是将高级语言(比如Java)编写的代码,转换成在操作系统(比如微软的Windows 10)上可以直接运行的二进制程序(比如QQ.exe)。

1.1 为什么要转换成二进制程序,才能在计算机上运行呢?

因为计算机系统的本质就是一堆开关,通过“开关”状态的改变——闭、合,来触发相应物理特性的变化(电平变化、磁性变化等),达到相互通信的等价效果。而闭、合这两种状态正好可以对应1和0两个数,这样计算机系统就和表示1和0的二进制联系起来了。

无论是CPU,还是内存、鼠标、键盘、硬盘、光盘……它们都基于上述基本原理,笔者的专栏撰写了不少文章,详细介绍了背后的实现方式。

1.2 编译器 vs 解释器

现实世界中,常见的翻译有两种形式:一种是一次性全部翻译,比如翻译的文学著作;

另一种是同声传译,同声传译是一种实时翻译,主讲人说一句或者几句,翻译者同步翻译出来。

回到编译的世界,前者对应编译器,后者对应解释器。

编译器说白了就是一次性把所有的代码翻译成目标平台的二进制,然后运行的时候,直接全速运行。

解释器则是边翻译边运行:读一条或者几条语句,翻译成对应的二进制,然后运行这一部分;接着再读接下来的一条或者几条语句,翻译成对应的二进制,然后再运行接下来的这一部分……以此类推。

从上面的描述可以看出,从最终的运行效率上看,编译器的方式应该是远远超过解释器的,毕竟前者是一次性得到所有的二进制,这样运行的时候就是一股脑地往前冲;而解释器则是边翻译边运行,速度上比应该是要慢不少。

除此之外,因为编译器是一次性翻译,所以它可以纵观全局,找出可以复用、优化的部分,然后加以综合,便于得到全局最优的二进制结果;而解释器由于是边翻译边运行,是一种局部行为,不利于进行全局把控、优化。

传统Java的运行是基于JVM(Java虚拟机)的,JVM其实就是一个加强版的解释器。它引入了JIT及其变种技术。这个技术名词上看上去高大上,其实原理说白了很简单:

我们都知道现实世界都遵循“二八原则”,即:任何领域,少部分的占比贡献或者占据了绝大部分的价值或资源。这个原则在代码领域也同样适用:

有一些代码比较“热门”,会被不断地重用或者调用,比如Java语言里热门的类、方法等。这样在翻译它们的时候,把它们缓存起来,这样解释器再次遇到这些代码的时候,就不用重新再翻译一遍,直接从缓存里取出翻译的结果来就好了。

当然,为了取得更好的优化结果,我们还可以将颗粒度做得更小,比方说我们可以把方法中被频繁调用的循环语句的翻译结果缓存起来。

1.3 为什么Java要基于解释器技术的JVM呢?

既然JVM基于解释器技术,天生就比较慢,那为什么Java还要执着于这种模式20多年呢?或者换句话说,自从Java1995年左右诞生,直到现在,除了华为,难道就没有其他公司想到抛弃JVM,直接采用编译器技术,直接将Java代码编译成原生二进制呢?

基于虚拟机运行的高级语言,比如Java,从代码到最终的二进制执行,其实就是两个阶段:

第一个阶段:代码->中间代码(字节码)

第二个阶段:中间代码(字节码)->二进制

有小伙伴就会挑战了:为什么非要搞出一个中间代码(字节码)呢?这个其实来自Java这样的高级语言的市场营销口号:Wrtie once,Run everywhere(一次编写、到处运行)。

通过Java编译器(Javac)将代码编译成标准的中间代码(字节码)之后,就可以将它部署到任何硬件平台上,只要该硬件平台上有对应的解释器将它在运行时翻译成对应的目标二进制,然后就可以运行了。

通过这种策略,只要每一个硬件平台上有对应的解释器,保证从中间代码(字节码)翻译到二进制的运行效果都一样,那么程序员只用写一套代码就完事了。

更重要的是:只要对中间代码(字节码)的格式、含义等进行了明确的规定、形成规范,那么开发对应硬件平台上的解释器,这个工作就可以交给不同的专业公司去做,从社会分工上也极大提高了效率:

一些公司专注写上层应用程序代码,一些公司专注开发第一个阶段(代码->中间代码)的编译器,一些公司专注制定中间代码(字节码)的规范,另一些公司可以专注开发不同硬件平台上的解释器——有3家硬件平台,就可以交给3家公司去做……

说得再通俗一点就是:创造了更多的就业岗位、大家都有饭吃:)

用流行的行话来说,就是建生态。

如果干掉JVM,那么:

从专注制定中间代码(字节码)规范的公司角度看:

我的饭碗没了!而且我最生气,在之前的生态中,我的话语权最高,现在我直接被华丽丽地无视了!而且在现实世界中,制定规范的公司往往就是发明和营销该语言的公司,它的感受可想而知。

从专注开发第一个阶段(代码->中间代码)编译器的公司和专注开发第二个阶段(中间代码->二进制)解释器的公司角度看:

没我啥事了,我的饭碗没了——就算干掉JVM的新技术中仍然有中间代码的变种,那我也得重新熟悉新变种,之前开发的东西都得改,这都是成本和风险。

在华为之前,历史上是否有尝试干掉JVM的公司呢?

答案是肯定的。

Java在1995被SUN发明出来之后,运行效率一直被诟病,1997年前后Java JIT技术开始被追捧。Symantec在打败了Borland等竞争对手、取得了JIT 编译器表面上的优势之后,立刻把重点放在了开发直接把 Java中间代码(字节码)编译成原生应用程序的原生Java 编译器。Symantec 成功开发出了这个原生Java编译器之后,加入到当时它最热销的集成开发环境Visual Café 中,成为一项吸引人的功能。不过很快地这个功能却引起了许多Java 使用者的批评,因为他们认为这违反了Java“一次编写、到处运行”的精神,如此一来厂商必须为每一个不同的平台开发原生Java 编译器,这会造成Java 应用程序在不同的平台执行的反应不一致的现象,又陷入C/C++语言开发的应用程序在不同的平台表现不一的相同问题。后来连发明Java的SUN也不赞成这种做法,当然这是因为SUN想力推自己的HotSpot编译器技术。因此原生Java编译器在风行了一阵短暂的时间之后就不再吸引人注意了。

下面再讲一个哪怕没有干掉JVM,只是魔改了JVM也被“修理”的例子。

比尔盖茨在挖到了Borland公司的首席架构师、被业内称为“编译器之神”的Anders Hejlsberg之后,在1996年11月发布了Microsoft Visual J++,该Java编译器的性能超越了同期的所有竞争对手。

但是这款编译器魔改了SUN制定的JVM规范,引入了很多自有创新,比如:

(1)对象模型创新:Sun的JVM的对象模型将“对象头”与对象的实例数据分开存放,而Microsoft Visual J++把两者放在了一起。

(2)使用指针而不是基于句柄的引用:因为Microsoft Visual J++基本上是用C/C++加上汇编写的,可以直接方便地使用指针来高效访问数据,而SUN是用Java来开发JVM的,只能使用句柄。

(3)垃圾收集机制创新:Microsoft Visual J++采用的分代的GC,大幅领先于当时的Sun JVM使用的不分代的GC。

(4)对象同步创新:SUM JVM使用的是哈希表来存放同步对象的映射,每次都需要先将句柄转换成key去查表;而微软采用的是它们在操作系统设计中常用的手法,直接在对象头中放一个同步块的指针,指针访问一步到位。

(5)RNI:直接采用COM技术访问本地接口,而不需要通过SUN定义的接口做二次转换。

Microsoft Visual J++推出之后也很快受到了所有Java 开发工具以及支持Java平台厂商的全面围剿。他们害怕Microsoft对Java市场的入侵,会让其他厂商再次无法生存。之后连SUN也开始领军围攻 Microsoft,因为SUN除了害怕Microsoft 会慢慢地主宰Java 平台和标准之外, 还发现 Microsoft正在很有技巧地逐步破坏Java语言和标准,例如Microsoft Visual J++便提供了许多非标准的Java用法并且很明显地把 Microsoft Visual J++绑死在Windows 平台,破坏 Java 的\"一次编写、到处运行\"的美梦。

通过上面两个20多年前的经典案例,不难看出:干掉JVM这件事,早有公司做过技术上的成功尝试,但是最终都没能在商业和市场上成功。这里面最关键的阻力在于:动了Java的品牌拥有者(以前是SUN,现在是收购了SUN的Oracle)的蛋糕,而它是Java的亲爹,掌握了“血统的纯正权”和“生态主导权”。根据现有的游戏规则,即便不是干掉JVM,哪怕是提供一个独立的JVM,也必须通过对应的TCK(Java兼容性测试)认证,才能被“合法化”。

2. 方舟编译器的优势是什么?

这个其实在前文已经表达得比较清楚了:直接编译出原生二进制,运行速度快。

但是带来的风险在上一个章节也揭示得很清楚了,这是现在大部分人忽视的地方。

既然干掉JVM的潜在风险不小,那么为什么仍然要力推方舟编译器呢?笔者分析如下:(1)因为方舟编译器本质上是一个通用的编译器框架,该框架理论上可以支持所有的语言,而不仅仅是Java。极端情况下,遭遇类似Symantec或者Microsoft当年受到的打击,也不是“满盘皆输”。

(2)方舟编译器这个框架,从实现上仍然采用了中间代码的技术,所以传统生态中,专注开发第一个阶段(代码->中间代码)编译器的公司和专注开发第二个阶段(中间代码->二进制)解释器的公司仍然可以在方舟生态中找到新的位置。关键在于配合怎样的生态政策和投资政策来吸引它们转型。

(3)基于方舟编译器的开放框架和中间语言技术,可以创造新的编程语言,这样也可以在极端情况下形成“编程语言的备胎”(这个有点杞人忧天了)。

(4)方舟配合鸿蒙等OS,撑大生态喇叭口,增加供应链上的自主控制点。

3. 方舟编译器的使用对象是谁?

它的使用对象是App开发者或者App运营商(App应用商城)。当他们使用方舟编译器将使用Java语言编写的App编译成目标手机硬件平台的二进制之后,就上架到App应用商城,供手机消费者下载。

4. 手机如何被方舟编译器加速?

不是手机被加速,而是App被加速。但这个加速是在上架App应用商城、被手机消费者下载之前就完成了。并没有什么额外“魔法”在消费者的手机上。

5. 方舟编译器的更多细节

关于方舟编译器的更多细节,可以关注笔者的头条号以及头条号付费专栏,里面有全方位的技术干货解读。

5

其实在头条上已经出现过无数的类似的问题了,直到现在,仍有很大一部分人没弄清方舟编译器到底是个什么东西,怎么来使用,认为方舟编译器是安装在手机中的。



“某手机支持方舟编译器” 这句话正确而完整的理解是 “某手机能够运行方舟编译器编译的程序”。方舟编译器是在开发环境部署的,是程序员哥哥用来把写好的代码编译成手机上能运行的app的。



对于技术上的问题,容易让非技术人员产生误解,理解产生偏差。用通俗的话来描述就是,面包师新买了一台面包机,这台面包机能做出更好的面包,而吃面包的人是不必拥有这台面包机的,他们只需要关心自己能不能吃下这台面包机做的面包,能不能被正常消化,能不能和身体兼容。

6

官方解释:方舟编译器可供开发者在开发环境一次性的将高级语言编译为机器码,手机安装应用程序后可全速运行程序,带来效率上的极大提升。

根据华为实验室的测试数据,EMUI 9.1在仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%。

按照开发人员的角度来说,就是一个虚拟机。

方舟编译器简单来说,就是可以将高级语言比如Java,直接编译成变成机器码的技术。它最大的优势就在于绕过了安卓系统的VM(虚拟机),从使得应用可以像苹果引以为傲的iOS系统一样,转化出的机器码可以直接由CPU运算,从而使得运行效率大大提升。

简单可以这么理解:

编译器是人类和机器建立沟通的桥梁。将人类语言(高级语言)翻译成机器看的懂的语言。而编译器的执行效率直接影响手机各种APP的响应速度。人类有自己的一套语言,机器有自己的一套语言,人类输入信息——编译器把人类的操作翻译成机器的语言——机器处理——通过编译器翻译成人类能理解的——处理结果。

编译器相当于机器理解人类,人类处理机器的说明书,有的编译器一句一字地翻译,有的编译器能把一大段话浓缩成一句,这就体现了编译器的效率。

华为的方舟编译器相当于优化了这个翻译过程,安卓系统原来输入信息后需要在一个中转站翻译,这个中转站需要消耗一部分性能,而方舟编译器可以不用中转站,直接把翻译信息送达处理器执行,从而提高效率

7

如果你买的是荣耀最新的旗舰手机荣耀20系列的话,是不需要手动更新的,荣耀20系列应该是出厂自带方舟编译器,在之前,EMUI9.1已经对系统组件System Server使用方舟编译器进行优化,也就是说只要你的手机系统升级到EMUI9.1,就已经用上了方舟编译器。

很多人对方舟编译器表示好奇,不明白它到底有怎样的体验,其实,提升系统流畅度、提升第三方应用打开速度。

1、提升系统流畅度。目前EMUI 9.1中已经对系统组件System Server使用方舟编译器进行优化,带来了24%的系统流畅度提升,系统响应性能提高44%。这点本人深有体会,我的荣耀V20更新EMUI 9.1之后,系统反应速度明显比之前明显流畅了很多。

2、提升第三方应用打开速度。除了系统本身之外,使用了方舟编译器的第三方应用,其流畅度也会有大幅提升,基本能做到秒开,对你没看错就是秒开,目前第三方有微博极速版进行了适配,根据华为给出的统计数据,操作流畅度可以提升60% 。并不是所有 app 都支持方舟编译器,需要开发者主动采用方舟编译器去开发应用才行,估计要等到今年下半年才有希望开始普及。

所以荣耀20在有了方舟编译器的情况下,可以说是能体验到目前为止最为流畅的安卓系统,那些说安卓卡的用户,可以尝试更新一下EMUI 9.1了。

8

还是别开源的好,就像苹果系统一样,好用了,就会有人去买,再贵也有买的,,,中国总不能让外国牵着鼻子走吧

9

编译器是生产工具,跟用户没啥关系。

10

很多人对方舟编译器有一个误解,认为方舟编译器是安装在手机端的,其实不然,方舟编译器是在电脑端的,是给软件开发程序员开发程序的。软件开发到运行的大概过程:首先软件开发程序员利用方舟编译器编译程序,然后打包成程序软件包,接着把程序软件包上传到服务器上。用户再从服务器上下载和安装程序软件包,之后运行程序。方舟编译器的本质就是把其他语言编译成二进制语言,二进制语言是可以直接运行在CPU上的。