正文
具体来说,ART在应用安装时会将.apk文件解压,并把.dex文件预编译为.oat可执行文件。但预编译的缺陷就在于效率低,所以到了Android 7.0上,谷歌就博采众长,让Android采用了AOT+JIT+Interpreter(解释执行)共存的模式。
这一时期,AOT不再将.dex文件编译为.oat文件,而是通过Interpreter的方式启动应用,在应用运行过程中系统探测到常用的Hot Code(热点代码)则会切换到JIT编译,这些被编译的配置工件都会被存储在缓存中。当设备处于空闲状态时,AOT就会将被编译的配置工件编译为.oat可执行文件。
然而无论谷歌如何优化,应用的安装都是在设备本地执行,所以就导致入门机的应用安装体验始终无法得到解决。如此一来,谷歌在Android 16引入云编译功能就有望成为这类机型的“解药”,将应用的编译过程转移到云端,正好就规避了入门机硬件配置低的问题。
可面对数以百万计的Android应用,谷歌又要如何确保不出问题呢?显然仅凭他们自己显然做不到让每一个应用都适配云编译,所以谷歌的解决方案是“发动用户”。当某一款安装了相关应用的设备处于空闲、且通过WIFI联网时,系统就会将其产生的编译配置工件上传到Google Play,在其他用户的同款设备安装这一应用时,Google Play就会知道该如何预编译这款应用了。