插件化
layout: post title: “2023-12-08-插件化.markdown” date: 2023-12-08 12:11:30 +0800
- 插件化 - 代码插件化 1) java自定义类加载器 -可以设置查找class的文件目录,进而加载下载插件的代码 在需要加载插件内容时,主动使用自定义类加载器加载插件入口类 -被自定义类加载器加载的类,在遇到其他待加载的类时,会使用自定义类加载器
-能否加载系统类 2) 双亲委派机制 BootStrap ClassLoader Extension ClassLoader Application ClassLoader
BootClassLoader PathClassLoader DexClassLoader
-设置自定义类加载器的父加载器为DexClassLoader,插件可以使用插件容器的类
- 插件化 - 四大组件
- Activity的加载需要系统验证 可以通过hook Instrumentation或者ActivityManager,将插件的Activity改为预设的Activity
- 需要拦截Activity的加载 api 28 - android 9有AppComponentFactory
- 插件化 - SO
- System.loadLibrary()的方式会在classLoader的目录中查找so文件
- System.load(““)可以加载文件的绝对路径
- 插件化 - 资源文件
- 使用AssetManager中addAssetPath的方式,添加插件资源目录; 需要解决R文件id冲突的问题.可以使用aapt2的–package-id参数 需要在定义资源名称的时候避免冲突
- 可以为插件Activity设置自定义AssetManager;插件和宿主的资源不互通