这是第二部分【解决方案】的第一章
加载外部dex
加载外部dex主要有3个步骤:
- 从服务器下载插件 apk到手机 sdcard(需要sdcard权限)
- 读取插件apk中的dex,生成对应的 DexClassLoader
- 使用DexClassLoader 的loadClass 方法读取插件 dex 中的任何一个类
在理解原理的时候,可以把插件App放在主App的 assets 目录中,用于替代从服务器下载插件。
接下来的部分是例子演示,这里不表。
插件的瘦身
在插件化编程过程中会出现某个moudule在测试的时候需要,但是在正式环境中不需要,因此,可以把这个module打包成jar包,之后使用provided引用:
provided files(“lib/classes.jar”)
因为关键字provided只支持jar包,而不支持module
Application 的插件化解决方案
在插件中可能自定义Application,插件会在这个自定义的Application的onCreate中做一些初始化工作,但我们知道插件的Application是没机会执行的,此时,我们可以在宿主的自定义的Application的onCreate方法中,手动把这些插件Application都反射出来,执行他们的onCreate,不过这样一来,插件Application就是没有生命周期的,它彻底沦为一个普通类。
1 |
|