您的位置:首页 > 移动开发 > Android开发

Android插件化框架 RePlugin 初探

2018-02-04 21:47 190 查看


为什么要使用Android插件化框架?

写软件时,软件的扩展性至关重要。而软件的扩展性跟其代码的解耦程度相关。解耦程度大,就是模块化强。解耦程度小,即模块化弱。

插件化框架RePlugin,所做的就是将软件解耦,实现了代码的模块化。这对软件本身的后续开发、功能添加等,是十分有利的。大大降低了扩展软件的成本,代码的清晰度也提高了。

RePlugin带来的好处不止这些,它还给应用提供了“不用更新APP,直接更新、添加功能”的能力。能帮助我们以更低的用户成本,更加快速的进行迭代。

Android插件化框架要解决什么问题?

从Android的FrameWork结构来看,Android插件化都要解决基本的三个问题:

1. 资源管理,比如drawable、string等资源

2. 四大组件的生命周期,主要是activity、service组件

3. ClassLoader类加载

目前已经开源的Android插件化框架

开源的插件化框架:

1. Atlas(阿里 点击访问GitHub

2. VirtualAPK(滴滴 点击访问GitHub

3. RePlugin(360 点击访问GitHub

其中,Atlas主要概念是组件化。RePlugin的优点是只hook了一处——ClassLoader。所以稳定性极强,适配十分简单。

RePlugin 两个主要概念

RePlugin分为宿主和插件的概念。一个APP由 1个宿主 + n个插件组成。宿主的主要功能是管理插件的安装、卸载、更新;插件权限管理等等(当然也可以将管理功能作为一个插件)。那APP下的每一个模块就可以对应一个插件。当你需要添加功能、更新功能的时候,直接把新的插件或更新后的插件发布到线上即可。

RePlugin 宿主配置教程

添加 RePlugin Host Gradle 依赖

在项目根目录的 build.gradle中添加 replugin-host-gradle 依赖:

buildscript {
dependencies {
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
...
}
}


添加 RePlugin Host Library 依赖

在 app/build.gradle 中应用 replugin-host-gradle 插件,并添加 replugin-host-lib 依赖:

android {
// 要配置applicationId
defaultConfig {
applicationId "com.qihoo360.replugin.sample.host"
...
}
...
}

// apply语句必须放置到android标签之后,以读取applicationId属性
apply plugin: 'replugin-host-gradle'

dependencies {
compile 'com.qihoo360.replugin:replugin-host-lib:2.2.1'
...
}


配置 Application 类

让工程的 Application 直接继承自 RePluginApplication。

public class MainApplication extends RePluginApplication {

}


在AndroidManifest中配置这个Application。

<application android:name=".MainApplication"
...
/>


只需三步就把RePlugin的宿主配置好了,之后即可在宿主的代码中调用RePlugin相关api,启动、管理插件。

注:如果插件需要使用宿主的依赖库,需要在宿主的Application类中加入以下代码把”插件使用宿主类”选项打开,默认是关闭

rePluginConfig.setUseHostClassIfNotFound(true);


RePlugin 插件配置教程

项目根目录的build.gradle,添加以下代码

buildscript {
dependencies {
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
...
}
}


在app/build.gradle中,添加以下代码

apply plugin: 'replugin-plugin-gradle'

dependencies {
implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.2.1'
...
}


两步即可将插件配置好。编写插件代码之后,将插件工程导出apk,改名为 [PluginName].jar 放到宿主工程的assets/plugins文件夹,启动APP即可。

注:

配置插件别名时,在插件的AndroidManifest.xml中,添加以下内容即可(和activity标签并列)

<meta-data
android:name="com.qihoo360.plugin.name"
android:value="[你的插件别名]" />


插件的版本号即app/build.gradle中配置的 versionCode

更新插件时迭代插件版本号,重启应用,框架会自动重载、更新插件(RePlugin是这样设计的,但是有bug,解决方法见下,新版本的RePlugin已解决此bug但未发布,可自行去官网下载编译)

当前版本的RePlugin框架的bug:更新插件后,重启应用不会自动加载插件。要解决这个bug,需要在APP关闭时,同时将:GuardService进程(这是插件管理进程,默认启动)关闭即可。

compileOnly(provide) : 库只用于编译期,不会打入apk中;implement(compile) : 会打入apk中。在插件使用宿主的依赖库时,只需使用compileOnly即可,可以减小包的体积

版权声明

本文首发自简书:搜索作者 QinGeneral

无需授权即可转载,甚至无需保留以上版权声明;

转载时请务必注明作者。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息