android插件化的一种实现

插件化的框架很多很多,比如360开源的DroidPlugin, 但是有时候用户不能接受第三方的库,尤其是他们<觉得>有风险的库,就不得不自己实现简单动态加载方法。

需求

1.提供A和B jar包,B是从服务器上download下来,可替换
2.A包定义一个接口InterfaceA和实现类InterfaceAImpl,App基于InterfaceA写业务代码

方案

  1. A包的InterfaceImpl的构造函数接收B.jar的路径,并通过DexclassLoader去加载B.jar
  2. 加载之后,通过findClass和findMethod的方式去调用B.jar的类和函数
    实际上,InterfaceImpl的任何调用都是透传到B.jar的

要解决的问题

主要的问题都集中在UI资源处理上,这是在大多数插件方案里面要解决的。

  1. 布局
    布局全部用Java代码实现,复杂的布局拆分成空间,最大化复用。

  2. 字符串资源及多语言
    由于没有ID了,字符串资源是放在xml里面,解析之后放在HashMap,通过Key-Value的方式去选择显示。多语言就是根据机型多个XML。

  3. 图片
    放在asset下面解压加载,好在图片不多。

  4. so库
    so库涉及业务的,为了能做到热更新,放在B.jar的assets目录下,运行的时候解压到目录,然后用System.load加载。这个地方主要要注意的是要根据CPU类型解压对应的so

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容