项目简介
本项目借助360的RePlugin插件化框架,实现了Android应用的动态功能接入。通过插件化方案,应用能够在运行时动态加载和卸载功能模块,达成功能的灵活扩展与更新。项目涵盖主程序和插件程序的配置、插件的安装与卸载,以及相关工具类和基础类。
项目的主要特性和功能
- 插件化框架:基于360的RePlugin插件化框架,实现应用的动态功能接入。
- 主程序配置:包含Gradle配置、自定义Application配置、权限配置等,保证主程序正确加载和管理插件。
- 插件程序配置:有Gradle配置、AndroidManifest配置等,确保插件能被主程序正确识别和加载。
- 插件安装与卸载:提供插件的安装、卸载和检查功能,实现插件的动态管理。
- 工具类:包含日志记录、权限管理、网络请求、数据加载等工具类,简化开发流程。
- 基础类:提供基础的Activity、Fragment、Presenter等类,支持MVP架构,便于功能模块的开发和维护。
安装使用步骤
假设用户已经下载了本项目的源码文件。
1. 配置主程序
1.1 Gradle配置
在主程序的build.gradle
文件中,添加RePlugin插件的依赖:
groovy
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.3.3'
}
在app/build.gradle
文件中,添加RePlugin库的依赖:
groovy
dependencies {
implementation 'com.qihoo360.replugin:replugin-host-lib:2.3.0'
}
并在文件末尾添加:
groovy
apply plugin: 'replugin-host-gradle'
repluginHostConfig {
useAppCompat = true
}
1.2 自定义Application配置
在自定义的Application类中,初始化RePlugin插件系统: ```java public class MyApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); RePlugin.App.onCreate(); RePlugin.enableDebugger(this, BuildConfig.DEBUG); RePlugin.addCertSignature("4F:B9:67:FD:03:9D:B0:70:9B:36:01:35:3D:C7:7E:60".replace(":", "")); }
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
RePlugin.App.attachBaseContext(this, new RePluginConfig()
.setVerifySign(!BuildConfig.DEBUG)
.setPrintDetailLog(true)
.setUseHostClassIfNotFound(true)
.setMoveFileWhenInstalling(false));
}
}
并在`AndroidManifest.xml`中配置Application的name:
xml
2. 配置插件程序
2.1 Gradle配置
在插件程序的build.gradle
文件中,添加RePlugin插件的依赖:
groovy
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'
}
在app/build.gradle
文件中,添加RePlugin库的依赖:
groovy
dependencies {
implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
}
并在文件末尾添加:
groovy
apply plugin: 'replugin-plugin-gradle'
2.2 AndroidManifest配置
在插件程序的AndroidManifest.xml
中,配置插件的元数据:
xml
<application>
<meta-data
android:name="com.company.plg1.plugin"
android:value="replugin_plns" />
<meta-data
android:name="com.qihoo360.plugin.version.ver"
android:value="100" />
</application>
3. 安装与使用插件
在主程序中,通过按键触发插件的安装和卸载操作:
java
tvInfo.setOnClickListener(v -> loadingPlugin());
findViewById(R.id.btn_uninstall).setOnClickListener(v -> {
tvInfo.append(
PluginUtils.isPluginInstalled(0) && PluginUtils.unInstallPluginByIndex(0)
? "\n插件卸载成功" : "\n未安装插件或卸载失败\n失败原因:当前插件正在运行\n操作:请(冷启动)重启程序");
});
在loadingPlugin
方法中,检查插件是否已安装,如果没有则安装插件,如果已安装则启动插件的主活动:
```java
private void loadingPlugin() {
if (!PluginUtils.isPluginInstalled(0)) {
install();
} else {
gotoPluginMainActivity();
}
}
private void install() { PermissionUtils.permission(PermissionConstants.STORAGE) .callback(new PermissionUtils.SimpleCallback() { @Override public void onGranted() { if (PluginUtils.installPluginByIndex(0)) { gotoPluginMainActivity(); } }
@Override
public void onDenied() {
tvInfo.append("\n无文件系统权限,无法安装插件");
}
}).request();
}
private void gotoPluginMainActivity() { RePlugin.startActivity(mContext, RePlugin.createIntent(CollectionConfig.PLUGINS_NAME.get(0), "com.company.plg1.plugin.PluginMainActivity")); } ```
4. 运行项目
将项目导入Android Studio,编译并运行主程序。通过主程序的界面操作,可以动态安装和卸载插件,并启动插件的功能模块。
注意事项
- 配置Gradle时,注意版本兼容问题,避免卡在Gradle Sync上。
- 插件的
pluginName
必须写对,最好复制粘贴,否则可能导致插件无法正确识别。 - 安装插件前,务必获取文件系统权限,否则
RePlugin.install(filePath)
会返回null,导致插件安装失败。 - 卸载插件不一定是及时行为,如果插件正在运行,卸载操作仅会记录卸载行为,重启程序后才会执行卸载。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】