美文网首页
[安卓开发日记] ClassLoader

[安卓开发日记] ClassLoader

作者: chopperhl | 来源:发表于2020-04-10 10:57 被阅读0次

一、安卓中的三种ClassLoader

DexClassLoader、PathClassLoader、BootClassLoader(DexClassLoader和PathClassLoader在8.0以后完全一样,8.0之前会多一个odex目录的构造参数)

二、双亲委托机制。

loadClass方法调用时会从当前的ClassLoader一层一层向上查找这个类是否被加载,如果被加载直接返回已经加载的class,如果没有则调用父亲的loadClass继续判断是否已经加载,直到到达顶层的ClassLoader,顶层的loader如果发现没有加载,就会自己加载class,如果加载成功就返回,不成功则回溯到儿子loader加载,直到最后成功加载或者加载失败。
这种机制可以防止class被重复加载,也能防止篡改核心类。

三、插件化和热修复原理

通过Context.getClassLoader获取到apk宿主程序的PathClassLoader(继承自BaseDexClassLoader),然后通过反射获取DexPathList pathList的Field,DexPathList对象的dexElements主要保存从apk加载Dex信息。
通过 PathClassLoader(String dexPath, ClassLoader parent) 构造插件的ClassLoader然后利用反射获取dexElements数组,最后拼接设置回宿主的ClassLoader中,即实现了插件化和热修复的动态类加载。

public class BaseDexClassLoader extends ClassLoader {

    @UnsupportedAppUsage
    private final DexPathList pathList;
}

public final class DexPathList {
    /**
     * List of dex/resource (class path) elements.
     * Should be called pathElements, but the Facebook app uses reflection
     * to modify 'dexElements' (http://b/7726934).
     */
    @UnsupportedAppUsage
    private Element[] dexElements;

}

相关文章

  • [安卓开发日记] ClassLoader

    一、安卓中的三种ClassLoader DexClassLoader、PathClassLoader、BootCl...

  • 安卓classloader浅析

    classloader 是采用双亲委派的方式加载所需要的类。 双亲委派:从classloader的源码分析,在加载...

  • 安卓自定义View-画圆

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

  • 安卓动画样例-圆环变多变少

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

  • 安卓开发零基础入门系列

    本文由安卓开发007出品 ## 1.1 安卓发展历程## 1.2 安卓开发前景展望## 1.3 安卓开发入门之安装...

  • Android Gson使用详解

    Android Gson使用详解(出处: 安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户)

  • 安卓动画样例-放大缩小

    效果图 实现代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开...

  • 安卓学习笔记

    安卓开发

  • 关于此文集

    介绍 安卓开发菜鸟一枚,从今天开始每日记录开发中遇到的问题

  • 1.androidmiao

    1.android studio是开发安卓系统很好的工具; 2.开发安卓最好用linux系统或者mac,因为安卓是...

网友评论

      本文标题:[安卓开发日记] ClassLoader

      本文链接:https://www.haomeiwen.com/subject/hwsgphtx.html