为了账号安全,请及时绑定邮箱和手机立即绑定

MultiDex从基础原理到实践优化

难度中级
时长 1小时32分
学习人数
综合评分9.50
7人评价 查看评价
9.7 内容实用
9.7 简洁易懂
9.1 逻辑清晰
  • 代码热修复

    查看全部
  • 这个图片很棒呀.

    查看全部
  • Android4.4以下版本采用Dalvik虚拟机,4.4及以上采用ART虚拟机。

    1,在java.vm.version < 2.0.0(Dalvik虚拟机),在App运行过程中,Dex文件字节码经过JIT即时编译器动态的来编译成可执行的本地机器码,之后再执行,而且每次重新启动App都要经过一次这样的动态编译。这会导致应用启动慢,运行慢。

    2,在java.vm.version >= 2.0.0(ART虚拟机),使用AOT提前编译,在App安装时就将Dex字节码预编译转为本地机器码(原生指令),生成一个可以在本地运行的oat文件并存储在本地。优点:启动快,运行快,好点少。其在系统层面已经支持了多dex文件的处理,在预编译时合并为oat文件。


    查看全部
  • Dex里的Method ID采用ushort类型(两个字节)做标记,范围为0~65536,故方法数超限的数量为65536。

    查看全部
  • 代码热修复原理:

    将补丁dex插入到pathList.dexElements中的首位,优先加载热修复补丁dex。

    查看全部
    1. 编译期:


    2. http://img1.sycdn.imooc.com//5e8b405b0001aeec13050737.jpg

    3. 运行期:

    - 判断java.vm.version是否需要dex文件处理

    - davilk虚拟机:apk中二级dex文件解压到应用特定目录 -- 得到二级文件列表:SecondaryDexes -- 二级文件列表出入ClassLoader中

    - 二级文件注入ClassLoader:首先反射获取PathClassLoader的pathList字段 -- pathList再次反射 -- 获取内部的dexElements字段 -- 为前期解压获取的二级dex文件:classes2.dex、classesN.dex文件生成对应的Elements数组 -- 最后将Elements元素追加到pathList.dexElements的尾部

    - 后续需要加载某个类:遍历dexElements数组,挨个查找是否有要找的类。

    查看全部
  • Dex安装 

    查看全部
  • Java类加载机制:

    .class 文件 --> ClassLoader --> 类加载到虚拟机中,运行

    Android类加载机制:

    PathClassLoader加载.dex文件,找出在dex中要运行的类

    查看全部
  • IS_VM_MULTIDEX_CAPABLE =
            isVMMultidexCapable(System.getProperty("java.vm.version"))

    判断虚拟机是否支持multidex,根据java.vm.version判断,4.4及以上已经支持aot,安装时将字节码直接翻译成机器码,无需像jit即时编译每次重新打开app都要一遍将字节码翻译成机器码,再运行。

    查看全部
  • MultiDex.install(this);

    主要步骤:

    1. 判断虚拟机是否支持MultiDex

    2. 解压获取待安装的Dex文件列表

    3. 把Dex安装到ClassLoader中

    查看全部
  • 5.0以下开启multidex:

    1. app build.gradle中添加MultiDexEnabled:true

    2. 添加implement com.android.support:multidex:1.0.3

    3. Appcation的attachBaseContext中添加MultiDex.install(this)

    查看全部
  • dex方法超限65535原因:因为多个class类文件中每个方法都对应一个id,而dex中定义方法的区域Constant Pool,存储着所有class类文件的定义集合,Constant Pool允许运行定义范围是0-65535共65536个,超出就会提示报错。

    查看全部
  • dex是.class文件的集合,由很多个class文件压缩而来,去除很多class文件的冗余信息,便于移动设备执行。

    查看全部
    1. dex文件和dvm或art关系 --> .exe文件和windows系统的关系

    2. 5.0及以上开始支持多dex,5.0以下还是单dex

    3. java文件 经javac ---> .class文件 经dx.jar---> .dex文件

    查看全部
  • 啦啦
    查看全部
    0 采集 收起 来源:课程介绍

    2020-03-22

首页上一页12下一页尾页

举报

0/150
提交
取消
课程须知
本门课程适合有一定Android基础,期望进阶中高级岗位的同学。
老师告诉你能学到什么?
1、Java源代码的编译过程,Class文件与Dex文件之间的关系; 2、工程时编译出现的方法数超限问题的原因与解决方案; 3、MultiDex的使用方法及工作原理; 4、ART虚拟机与Dalvik虚拟机的区别; 5、代码热修复的原理; 6、MultiDex导致的启动ANR问题的原因与解决方案。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!