浅谈Android的multidex加载
来源:互联网 发布:sql alter table 编辑:程序博客网 时间:2024/06/05 19:32
做安卓app开发的童鞋多数我想都碰到过65535这个最大方法数的问题,如果时间回退到几年前,我想自己一定是一脸懵逼,不过好在google爸爸给我们提供了一个从打包 到加载的完整解决方案multidex,刚接触时并没有深入进行过原理了解,最近空闲时完整的看来一边源码 和朋友们浅谈一下自己的理解与感受 如果有理解不妥的地方 请童鞋们多多指正。
要说multidex的原理,我们必须重classloader说起,当然一看到这个类做java开发的或许都很熟悉,它的具体作用我就不详细介绍了,只大概讲解一下我的理解,当然我不讲双亲委派模式,我们都知道android运行app都是依赖虚拟机的,当然不论是dalvik还是art,都是用来解析执行指令的,在这我们从第一步解析谈起,我们开发编译出来的可安装文件apk里面的dex就是我们app的指令代码,这个dex文件class类代码在运行时会被虚拟机解析映射成c++层class结构,这个结构也不复杂,有兴趣的童鞋可以自行阅读art的源码,我们都知道java有类路径的概念,在开发时需要引入类的全路径或者用全路径反射,这个路径标识类的位置,这个位置又和class形成唯一映射的关系,这个映射关系需要来维护和查找,这个查找维护java层的类就是classloaer,当然虚拟机的c++层也有一个classloader类,但这个类只负责维护classtable,具体负责dex中的class解析和类路径维护的是classloadercontextt类,有兴趣的童鞋请自行阅读c++源码。
说完classloader,我们回到正题,google解决65535的方法其实大家都知道,就是分dex,简单点就是有很多dex,其中有一个主dex虚拟机自行负责加载映射,其余dex需要手动加载映射,这时候就用到了classloader,它可以查找class,当然也可以加载class,multidex在进行分包的时候,会在apk中形成例如
classes.dex、classes2.dex、classes3.dex的形式,在装载的时候会先把这些除主dex以外的dex文件解压到cache中,然后利用dexclassloader的pathList对象进行装载,multidex中的代码进行装载代码是通过反射的pathList这个字段的对象类DexPathList进行的,有兴趣的童鞋可以自己下载源码进行阅读,这里我就讲解到这,如有理解不妥 请多多指正
- 浅谈Android的multidex加载
- android multidex异步加载
- 关于Android MultiDex的问题
- Android Multidex 遇到的问题
- Android中Multidex的使用
- Android插件化(一):使用改进的MultiDex动态加载assets中的apk
- Android插件化(一):使用改进的MultiDex动态加载assets中的apk
- Android插件化(一):使用改进的MultiDex动态加载assets中的apk
- Android之ClassLoader类加载器(MultiDex、动态加载dex)
- android MultiDex
- Android的multidex使用及优化
- Android Multidex导致的App启动缓慢
- 【Android - 进阶】之MultiDex的配置
- android 解决multidex打包失败的坑
- Android Multidex解决类过多的问题
- 浅谈Android虚拟机的动态加载技术
- 浅谈Android虚拟机的动态加载技术
- 自定义multidex热加载无法反射DexPathList方法的解决方案
- Denoising Autoencoder for Collaborative Filtering on Market Basket Data
- tensorflow -GPU 安装的坑
- centOS6.8安装nginx
- MVP模式(Rxjava+retrofit+fresco)
- tomcat环境变量
- 浅谈Android的multidex加载
- 第三章:reactNative开发中弹性盒子布局
- 【Unity优化】贴图压缩
- 行背景颜色删除
- 2017清华本科生特等奖得主出炉,AI学霸乔明达获奖
- 蒟蒻复习之—–前缀和和差分
- 比特币区块链技术为何是未来最具影响力数字资产?
- 图形数据库Neo4j从入门到精通(含Neo4j+D3.js完整实战项目开发)
- Python学习---14