Android插件化相关记录

24年的时候项目中需要用到插件化相关的技术 这里总结一下

该文章不是教程,只是作为一个记录

 

APK的加载

设计的内容包含:so源文件,dex文件,asset资源文件

dex文件的加载

dex文件的加载就是类文件的加载,

1.需要执行的操作 首先,通过DexClassLoader的构造方法,利用DexPathList将apk中的dex文件中的内容加载为DexElement

2.通过反射的方法取出这些DexElement,然后将其追加到Android系统自身的类加载器中的DexElement 的列表中

 

资源文件的加载和使用

1.通过反射的方法创建一个AssetManager对象

2.用反射的方法调用addAssetPath 添加一个对象的路径,内部回去找到这个文件并使用native方法加载资源

使用:

1.在插件的Activity加在的时候,将Activity(ContextImplWrapper)中的mResource 替换为根据当前AssetManager创建的Resources

 

加载so源文件

1.拿到Apk的路径之后,通过PathClassLoader的里面的DexPathList对象,并且通过器makePathElement获取对应的so文件的路径

2.将so文件追加到宿主的类加载器的nativeLibraryPathElements中

 

Activity的启动

基础实现

当前的插件化方案是将ActivityThread中的Instrumentation 做一个替换,重写Instrumentation中的execStartActivity和newActivity 两个方法

1.execStartActivity中,将我们要启动的类替换为宿主中的替身Activity,借此绕过Activity在Manifiest注册的检测;

2.在newActivity将其中的根据Intent将我们实际要启动的Activity创建出来;

posted on 2026-01-05 15:35  落子无悔96  阅读(5)  评论(0)    收藏  举报

导航