美文网首页
android插件化的一种实现

android插件化的一种实现

作者: zzzabc | 来源:发表于2016-12-09 15:20 被阅读37次

    插件化的框架很多很多,比如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

    相关文章

      网友评论

          本文标题:android插件化的一种实现

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