方舟编译器处理第一款APP发布尝鲜以及简要分析

一、华为EMUI10.1系统更新说明:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第1张图片

二、华为应用市场下载到的最新的3.6.1版本的新浪新闻极速版本说明:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第2张图片

三、测试一下:

3.1性能

我也做了对比在同一个level的非华为手机上,发现冷启动在某些时候快,热启动差不多,虽然性能没有想象的那么大,但是这是一个方舟正式对外产品开始的信号,期待后面对于性能的优化。

3.2运行测试

观察安装包发现一个不一样的地方:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第3张图片

很明显,因为maple就是方舟编译器处理完以后的中间文件名称,打开以后发现:

在分析之前测试一下看有没有脱离安卓的java虚拟机:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第4张图片

右边是我删除了几乎所有的dex类和方法,只保留一个dex的壳,避免系统的检测,没有的话可能安装不上,然后重新打包,在华为EMUI10.1上运行完全没问题,说明方舟编译处理以后的APP完全脱离了dalvik/art,真的是NB。

由于手机没办法root,简单运行时候观察日志也可以看到启动时候的一个基本maple流程:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第5张图片

四、简要分析:

maple文件夹中:

apk.info:是关于这个APK在编译的时候一些信息的记录;

另一个mapleclasses.so就是方舟处理以上的dex文件所生成的so文件,初看有点大,20多M,APK整个包比之前大了10M左右,这个可能是方舟未来要解决的一个问题,但是在这里不重要。

方舟编译器处理第一款APP发布尝鲜以及简要分析_第6张图片

libmaplecore-all.so文件就是APP运行过程中依赖的toolchain,由于手机没root拿不到;

方舟编译器处理第一款APP发布尝鲜以及简要分析_第7张图片

看节可以看到,.java_text是整个so文件核心,应该是对dex文件翻译完以后的主要体现。

方舟编译器处理第一款APP发布尝鲜以及简要分析_第8张图片

这个是RC机制的管理以及引用的一些函数,和对于函数之间的调用处理的一些接口函数等,对于so文件中也有大量的字符串,是未来逆向分析的主要点,大致分析观察了了一下

方舟编译器处理第一款APP发布尝鲜以及简要分析_第9张图片

下面拿一个方法:Setvideolist简单的看一下:

java层对应的方法:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第10张图片

方舟处理完以后在so文件中:

方舟编译器处理第一款APP发布尝鲜以及简要分析_第11张图片

可以看到通过传递对应的参数"setVideoList|(Lcom/sina/sinavideo/sdk/data/VDVideoListInfo;)V",0"给.MCC_getFuncPtrFromItab进行调用处理,逻辑上还算清晰。

五、总结:

大致看了一下,发现有以下这几个点:

1.华为确实利用方舟脱离了安卓虚拟机,并且能够在这个时间内解决掉所有的转化性能兼容等以及热更等等问题,钻研精神确实值得学习。

2.对于性能没有显著的提升可能是在那个异常处理以及GC/RC那块需要进一步优化,相信他们能够做好,还是非常的期待;

继续改进的地方:

1.华为为了兼容其他的手机继续保留了dex文件,不过编译出的so文件比较大,体积是一个优化的地方,如果是一个大的APP的话dex文件很多很大的话,可能就会很大。

2.编译出来的so文件,字符串以及逻辑什么的太明显跟J2C转换出来效果类同,需要第三方的保护处理;当然能够抛弃dex文件已经安全性上提升了一大截。

你可能感兴趣的:(编译原理)