Android apk装机编译类型: verify、speed-profile, speed与启动耗时
Android apk装机编译类型: verify、speed-profile, speed与启动耗时
Dex2oat (dalvik excutable file to optimized art file) ,对 dex 文件进行编译优化,Android 虚拟机可识别的是dex文件,应用运行过程如果每次都将dex文件加载内存,解释执行字节码,效率很低, 严重影响用户体验。通过 dex2oat 优化后, 可在系统运行之前利用合适的时机将dex文件字节码提前转化为虚拟机可以执行运行的机器码,后续直接运行机器码,则更加流畅,优化用户体验。
机器码生成方式: JIT生成的机器码缓存在内存中,运行时优化。
ART包括一个编译器(dex2oat工具)和一个为启动Zygote而加载的运行时(libart.so)。dex2oat工具接
受一个APK文件,生成一个或多个编译生成文件,然后运行时将会加载这些文件。文件的个数、
扩展名和名称会因版本而异,在Android O及后版本中,将会生成以下文件:
vdex: 包含有APK的未压缩DEX代码。
.odex: 包含有APK中已经过AOT编译的方法代码。
.art (optional): 用于加快应用启动速度。
Android apk装机的编译类型:
verify、quicken、space-profile、space、speed-profile, speed、everything。
(1)越靠前占用空间越小安装时间越短,但打开应用及应用的运行耗时长(慢);
(2)越后面的类型编译时间越长(安装时间长),占用的空间也越大,但运行时打开速度也越快(简单的说就是全部预编译完了,避免在运行时做更多操作),典型空间换时间策略。
speed和speed-profile是android N编译模式中的两种选项。speed是一种编译模式,旨在最大化运行时性能, 而speed-profile则是部分编译模式, 根据profile记录的热点函数来编译, 也是为了最大化运行时性能。
adb shell命令检查JIT编译的状态,
adb shell dumpsys package 包名 | findstr -i "status"
如果输出的日志有:
[status=speed]
则JIT模式为快速的speed模式。
编译模式选择
通过 --compiler-filter 参数控制编译优化级别,直接影响 OAT 文件大小、安装时间和运行时性能:
-quicken:快速编译(最低优化),安装快但运行时性能一般,适用于低端设备或调试场景。
-speed:完全优化,牺牲安装时间换取最佳性能,适合中高端设备。运行时最快。
-speed-profile:基于运行时 Profile 优化,需结合生成的热点数据。相当于半speed。
-verify:仅验证 DEX 文件,不生成机器码,适用于快速安装。
ROM过大可以通过调整-compiler-filter,减少apk生成odex文件所占据空间的大小,通常来说odex+vdex文件越大,说明dex2oat优化的类越多越彻底,性能也相对较好,运行时速度也越快。
命令:
adb shell "cmd package compile --reset 包名"
重置应用的JIT编译模式设置。
强制把某一个应用的编译为speed模式:
adb shell cmd package compile -m speed -f --full 包名
odex是由 android apk中的classes.dex生成的。可以加快app的启动速度,预先提取,减少对RAM的占用,因为没有odex的话,系统要从apk包中提取dex再运行。
原本系统恢复出厂设置后第一次开机需要先提取classes.dex,而odex化就是现在提前把它提取出来。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,提取后可把apk内的dex删除。如果不是odex,那么还是会摄取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份odex的体积。
odex后系统启动和程序运行速度大大提高,稳定性不变。
Android JIT编译:adb shell cmd package compile选项_android cmd package compile -m speed -f my-package-CSDN博客文章浏览阅读1.3k次,点赞13次,收藏27次。Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler,即时编译技术。ART 引入了预先编译机制,可提高应用的性能。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用。Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术-CSDN博客。_android cmd package compile -m speed -f my-packagehttps://blog.csdn.net/zhangphil/article/details/147557654
Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术-CSDN博客文章浏览阅读818次,点赞12次,收藏12次。Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler,即时编译技术。JIT:以下是 ART 实现的一些主要功能。ART 引入了预先编译机制,可提高应用的性能。ART 还具有比 Dalvik 更严格的安装时验证。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用。_android jithttps://blog.csdn.net/zhangphil/article/details/147520790