当前位置: 首页 > news >正文

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-package https://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 jit https://blog.csdn.net/zhangphil/article/details/147520790

http://www.lqws.cn/news/141139.html

相关文章:

  • BUU MISC(持续更新)
  • [Java 基础]面向对象-继承
  • 得力Deli GE330W打印机信息
  • 如何流畅播放体育电竞赛事?
  • 三角形类CTriangle
  • python打卡day44
  • day 44
  • 【Bluedroid】蓝牙启动之gatt_init 流程源码解析
  • NLP学习路线图(二十二): 循环神经网络(RNN)
  • Linux进程调度:从时间片到实时任务的交响乐
  • 深入理解计算机进制:从原理到 C++ 实现
  • uniapp uni-id-co errCode“:“uni-id-captcha-required“,“errMsg“:“Captcha required
  • [华为eNSP] 在eNSP上实现IPv4地址以及IPv4静态路由的配置
  • kafka命令
  • Oj系统测试报告
  • Postgresql常规SQL语句操作
  • 软件工程:如何在项目中把软件做好
  • linux_centos7.x的ifconfig命令显示内容详解
  • 对抗性提示:大型语言模型的安全性测试
  • 【向量化模型如何私有化部署】一文说清原理、流程与最佳实践
  • 验证负载均衡与弹性伸缩
  • 猎板硬金镀层厚度:新能源汽车高压系统的可靠性基石
  • 【Windows开发】Windows 事件跟踪 (ETW)
  • QGIS新手教程3:QGIS矢量图层导入与导出+Shape Tools插件绘图
  • window 显示驱动开发-提供视频解码功能(二)
  • simulink这边重新第二次仿真时,直接UE5崩溃,然后simulink没有响应
  • 易基因:贵州省医刘代顺团队MeRIP-seq揭示m6A修饰在病毒感染中的免疫调控作用 | 项目文章
  • 深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
  • 数学复习笔记 26
  • matlab实现高斯烟羽模型算法