阅读 3960

Android插件框架的两个作用

首先谈谈我们理解的Android插件框架有什么作用,免得大家同我们交流时不在一个频道。

我们理解的插件框架有两个作用:一是“自解耦”,二是“免安装”。

自解耦指的是一个应用原本由一份代码编译而成,希望改成将其中的一些功能单独编译,像插件一样动态插在主应用上。这样一来可是使主应用体积变小,下载安装更方便。二来可以是比较独立的功能可以单独开发调试,甚至单独更新版本。所以这个“自解耦”的需求并不是在Android平台上出现的,早在PC开发时代就广泛存在了。

免安装指的一个应用原本需要安装过程才能启动运行,希望改为无需安装即可从一个已经安装运行的App中启动起来。这一需求的主要目的是提高流量复用的能力。比如在一个用户量已经非常大的应用中推荐安装另一新应用,用户点击入口后如果等待下载然后弹出了安装界面,这就会流失非常多的用户。因为用户总会觉得安装有成本,不那么愿意安装新应用。即使你有信心用户一旦安装了你的应用就会留下来,也很可能会因为这个安装过程而流失掉。免安装这个场景其实是Shadow服务于我们自身业务时的主要场景。

“像Web一样开发App”则是一个我们后期达成的目标,这大概是“自解耦”和“免安装”的组合形式。单纯的免安装方式去运行一个原本需要安装才能运行的App,不可避免的需要用户等待这个App的安装包下载到本地才能运行。而我们知道Web一般是不用这样的,打开哪个页面就去下载哪个页面的资源,不用把整个网站都下载到本地才能打开第一个页面。因此,我们在业务中也实践了“自解耦”,将我们的业务插件拆解成了十几个插件。由此达到下载一部分启动一部分的能力。Shadow目前开源的代码已经支持这一能力了,不过Shadow目前开源的代码中没有演示此场景的Sample,我们会尽快补充上的。

自解耦和免安装还在版本控制上有一定区别,一般自解耦的插件不太可能单独运行,很可能依赖了宿主程序或者其他插件。免安装的App由于本身就可以安装运行,所以通常不存在这种依赖关系。存在依赖关系带来的问题就是不容易单独更新。如果对其他部分(宿主或其他插件)只有接口层面的依赖,我们可以更新插件的实现。如果对其他部分有实现层面的依赖,一般来说很难单独更新插件了。

所以非常欢迎大家同我们交流插件框架的使用,在交流时我们也会先关心你的业务场景是“自解耦”的还是“免安装”的,亦或是二者结合的。因为这关系到一些版本控制、哪部分能更新哪部分不能更新的问题。