一、    Android ART简介

  1. Android DEX/ODEX/OAT文件

        Android ART简介

 

.class文件:JVM虚拟机(Java VM)执行的字节码文件;

.dex文件:DVM虚拟机(Dalvik VM)执行的字节码文件;

.odex文件:.dex文件经过优化生成的字节码文件;

  • oat文件:.dex文件经过dex2oat翻译生成的机器码。

 

 

1)  .class文件与.dex文件的主要区别在于:.class文件只包含一个类,而.dex文件可以包含多个类。

Android ART简介

 

Android ART简介

我们编译生成的classes.dex文件还包含第三方jar包等。

 

2)  (Android KK为例)USER Binary与ENG Binary的生成.odex文件区别:

USER版本的system分区:

 

Android ART简介

 

在USER Binary中,.odex文件是在我们编译版本的时候生成的(并不是全部的apk都在编译时生成)。编译时将.dex优化生成.odex文件,我们可以看到生成.odex文件的apk中是没有.dex文件的。

下图是将LogsProvider.apk解压后的结果:

Android ART简介

我们将Kies.apk解压后可以看到,还是包含.dex文件的(它对应的.odex文件会在烧完USER binary后第一次开机时生成在/data/dalvik-cache中,为什么不在编译时直接生成,以节省开机时间?):

 

Android ART简介

Android ART简介

ENG版本的system分区以及/data/dalvik-cache:(odex文件在ENG binary烧录完第一次开机时生成在/data/dalvik-cache)

Android ART简介Android ART简介

 

3)  (Android L)USER Binary与ENG Binary的生成OAT文件区别:

跟Android KK类似,USER binary在我们编译时就会将apk中的dex翻译成机器码。

Android ART简介

以Telecom.apk为例,在Telecom/arm目录下有两个xz压缩文件 ,其中Telecom.odex.xz就是OAT机器码的压缩文件,Telecom.odex.art.xz文件目前不清楚细节。

Android ART简介

Android ART简介

所以,USER binary在烧完第一次开机时,只需解压缩xz文件到/data/dalvik-cache中:

Android ART简介

ENG binary在烧完第一次开机时,会将apk中的dex文件翻译成OAT文件放到/data/dalvik-cache中:

Android ART简介

 

这也是为什么Android L ENG binary比USER binary第一次启动时间长很多的原因。

 

2. Android Dalvik

Dalvik虚拟机是Goole设计用于Android平台的Java虚拟机,Dalvik虚拟机通过解释执行dex文件,每个应用程序都对应与一个单独的Dalvik虚拟机实例。Android L之前使用的虚拟机。

Android ART简介

相关文章:

  • 2022-12-23
  • 2021-03-31
  • 2021-10-26
  • 2021-08-14
  • 2021-05-11
  • 2022-01-14
  • 2021-05-01
  • 2021-06-19
猜你喜欢
  • 2022-02-11
  • 2022-02-05
  • 2021-09-26
  • 2022-12-23
  • 2022-12-23
  • 2021-08-01
相关资源
相似解决方案