微工具箱强制odex2oat(dexopt 与 dex2oat 区别)

:暂无数据 2026-08-06 18:40:01 2

微工具箱强制odex2oat(dexopt 与 dex2oat 区别)

大家好,今天小编来为大家解答以下的问题,关于微工具箱强制odex2oat,dexopt 与 dex2oat 区别这个很多人还不知道,现在让我们一起来看看吧!

本文目录

dexopt 与 dex2oat 区别

答: 这道题目如果想深入理解就需要去看源码了,不过对于应用层开发来说有个原理上的大致理解也是必须掌握的,具体区别可用如下图概述()。

通过上图可以很明显的看出 dexopt 与 dex2oat 的区别,前者针对 Dalvik 虚拟机,后者针对 Art 虚拟机。

除此之外在上图还可以看到 Dalvik 虚拟机中有使用 JIT 编译器,也就是说其也能将程序运行的热点 java 字节码编译成本地 code 执行,所以其与 Art 虚拟机还是有区别的。Art 虚拟机的 dex2oat 是提前编译所有 dex 字节码,而 Dalvik 虚拟机只编译使用启发式检测中最频繁执行的热点字节码。

强制dex2oat伤手机吗

伤手机。dex2oat是在安装app的时候转化java代码到机器码,这样会大幅提高程序效率,根据查询相关资料显示,如果强制停止dex2oat会导致手机卡顿,因为违背了art虚拟机设计的初衷会影响运行速度,久而久之会伤害手机运行速度,不能够强制停止dex2oat的运行。

细说dex2oat(1) - dex2oat的命令行参数

首先我们先看一下dex2oat都支持一些什么样的命令行参数:

上面我们学习了dex2oat的参数的简介,下面我们学以致用,看看在真实的环境中它们是如何被使用的。

我们直接看build时,dex2oat的参数是如何被传进去的,在build/core/dex_preopt_libart.mk中:

首先指定两个运行时参数,这两个参数是在前面定义的:

也就是说,这两个值取自属性dalvik.vm.dex2oat-Xms和vm.dex2oat-Xmx。这两个属性是哪里来的呢,是在/build/target/product/runtime_libart.mk中,编译的时候指定进来的:

这样,这两个值分别是64m和512m。

我们回到dex_preopt_libart.mk中继续看:

查这个PRIVATE_DEX_PREOPT_IMAGE_LOCATION,定义于/build/core/setup_one_odex.mk中:

然后再向上追my_dex_preopt_image_location

LOCAL_DEX_PREOPT_IMAGE_LOCATION没有定义,继续顺藤摸瓜。

再继续追DEXPREOPT_BOOT_JAR_DIR_FULL_PATH:

先看后面的DEXPREOPT_BOOT_JAR_DIR,原来就是system/framework

再看前面的DEXPREOPT_PRODUCT_DIR_FULL_PATH,是out下的dex_bootjars

最后 --boot-image 的值为 out/dex_bootjars/system/framework/boot.art

这个就不多说了

追查:

这个板级驱动已经配好了。

在同样的位置定义:

include-patch-information兼runtime-arg -Xnorelocate,生成重定位的信息,因为后面还要走patchoat呢。

no-generate-debug-info,不生成调试信息

大家留神啊,现在已经是selinux的时代了,dex2oat也需要配置相关的权限:

这还不算,在installd的权限配置/external/sepolicy/installd.te中,明确设置了

前面讲的参数中,有一项是--boot-image。我们先看一下这个boot-image是如何编出来的,正好是一个完整的dex2oat的例子.

我们看下在MediaTek MT6753平台下,是如何生成的。
MT6753是64位Cortex-A53的架构,所以boot.art也是64位和32位两套。

先看64位的吧:

初始堆大小和最大堆大小。

预加载类的路径

以上是一大堆的dex文件

以上是上面那一大堆dex对应的jar文件路径

符号表的位置

输出文件有两个:一个是boot.oat,一个是boot.art。

基地址0x70000000

对于指令架构,除了arm64,更细的是cortex-a53

最后这几个前面都说过了。

上面都是java和dex,所以跟64位没有什么区别。

输出文件从arm64目录换到了arm目录

基地址没变,反正patchoat的时候也还要改。

指令集从arm64变成了arm,其它的参数都不变

这两个值在前面分析Android.oat.mak时已经分析过了,这里验证了我们的分析是正确的。

这个boot.art就是上一节讲的命令刚刚生成的。

输入的dex文件

输出到odex文件,虽然名字叫odex,但是实际上是个oat。普通的应用就不像上节讲的输出boot.oat和boot.art的时候那样输出那么多了,只有一个odex文件,符号表和image都不用。

在Android的mk系统中,调用dex2oat中有几处,但是真正被调用来生成目标系统上的oat的是下面这个,位于/build/core/dex_preopt_libart.mk中:

这个dex2oat-one-file,是被dexpreopt-one-file调用,位于/build/core/dex_preopt.mk中:

以下根据生成的类型不同,包、库、预先编译好的应用有不同的路径。

/build/core/package_internal.mk

/build/core/java_library.mk

我们再来看看,odex是如何被install到system分区下面的。

我们看一个实际的例子:

除了编译之外,我们得先看一些预先定义好的函数。它们定义于/build/core/definitions.mk中。

将class文件压缩成classes*.dex

将依赖文件复制到目标文件

文章分享结束,微工具箱强制odex2oat和dexopt 与 dex2oat 区别的答案你都知道了吗?欢迎再次光临本站哦!

微工具箱强制odex2oat(dexopt 与 dex2oat 区别)

本文编辑:admin

更多文章:


send out用法及例句(send out是什么意思)

send out用法及例句(send out是什么意思)

各位老铁们好,相信很多人对send out用法及例句都不是特别的了解,因此呢,今天就来为大家分享下关于send out用法及例句以及send out是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 20:30

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

大家好,电脑里2个系统怎么删除一个相信很多的网友都不是很明白,包括电脑开机显示有两个系统,如何删除一个也是一样,不过没有关系,接下来就来为大家分享关于电脑里2个系统怎么删除一个和电脑开机显示有两个系统,如何删除一个的一些知识点,大家可以关注

2026年9月7日 12:20

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

大家好,今天小编来为大家解答以下的问题,关于苹果手机代码大全,恢复更新固件iOS未知错误代码解决大全这个很多人还不知道,现在让我们一起来看看吧!

2026年9月7日 10:20

scrollthrough意思(“scroll”是什么意思)

scrollthrough意思(“scroll”是什么意思)

今天给各位分享“scroll”是什么意思的知识,其中也会对“scroll”是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 08:00

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

本篇文章给大家谈谈怎么激活keygen,以及注册机如何激活cad2008一个简单激活cad2008的方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站

2026年9月7日 06:30

最近更新

热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表