Android ART、Dalvik在multidex上的差异、关联

   为提升应用运行性能,谷歌官方从5.0(api level:21)版本开始,将虚拟机运行环境默认为ART, 此处主要研究ART、Dalvik在multidex处理上的差异和关联,做了一个简单的手绘,如下: 

  multidex由分包、合包两个过程组成,分包均是通过andriod build tool来做的,两者存在一个很重要的差异点:

  android 5.0及以上手机在安装apk时,手机设备中的dex2oat工具会将dex1~dexN读取合成为一个oat文件, 供art使用。dex2oat的过程是不区分主dex、辅助dex的,这样在编译时就可以节省dex merging这个操作(用来计算主dex放哪些类),dex的增量编译效率得以提高。而android 5.0以下版本的手机上,dalvik的输入文件为dex,需通过主dex使用multidex support包加载辅助dex的方式来合包。

  因此,5.0及以上版本,multidex support的install操作是需要阻断的,它的兼容逻辑在MultiDex.install可以看到:

  即,系统配置属性java.vm.version大于"2.0.0"表明虚拟机运行环境为ART。

 

Ref:

  https://developer.android.com/studio/build/multidex.html#about

  https://developer.android.com/guide/practices/verifying-apps-art.html

 

       

  

 

posted on 2018-04-22 15:38  熊猫观星  阅读(467)  评论(0编辑  收藏  举报

导航