Replugin是360開源的一款插件化架構,同樣過多的資料就不在這展現了,github上有最完整的官網介紹。
github位址:https://github.com/DroidPluginTeam/DroidPlugin
宿主接入工作
project的gradle中加入:
classpath'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
app的gradle中加入:
apply plugin: 'replugin-host-gradle'
repluginHostConfig {
/**
* 是否使用 AppCompat 庫
* 不需要個性化配置時,無需添加
*/
useAppCompat = true
// /**
// * 背景不透明的坑的數量
// * 不需要個性化配置時,無需添加
// */
// countNotTranslucentStandard = 6
// countNotTranslucentSingleTop = 2
// countNotTranslucentSingleTask = 3
// countNotTranslucentSingleInstance = 2
}
dependencies {
...
compile 'com.qihoo360.replugin:replugin-host-lib:2.2.1'
}
建立application繼承RepluginApplication,并在Mainfest中加入。
或者重寫Application的生命周期
public class MyApplication extends Application {
public static int a = 1;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
RePlugin.App.attachBaseContext(this);
}
@Override
public void onCreate() {
super.onCreate();
RePlugin.getConfig().setUseHostClassIfNotFound(true);
RePlugin.App.onCreate();
RePlugin.enableDebugger(this, BuildConfig.DEBUG);
// RePlugin.getConfig().setUseHostClassIfNotFound(true);
}
@Override
public void onLowMemory() {
super.onLowMemory();
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onLowMemory();
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onTrimMemory(level);
}
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onConfigurationChanged(config);
}
}
安裝插件:
360的插件有兩種安裝方式,一種是内置插件,一種是外置插件。 插件的生成方法會在下面說明,這裡隻說明宿主的接入工作。
内置插件:
插件的格式從apk重命名為jar,在android的assets目錄下建立目錄plugins,然後将以jar結尾的插件放入裡面即可。 内置插件是app宿主會自動安裝的,不需要使用者去主動調用方法安裝插件。
外置插件:
外置插件是以apk的形式存在,我們放入sd卡或者從網絡下載下傳即可。 安裝和解除安裝外置插件的方法是:
RePlugin.uninstall("plugin");
RePlugin.install(Environment.getExternalStorageDirectory().getAbsolutePath() + "/plugin.apk");
宿主與外置插件的互動:
Intent intent = RePlugin.createIntent("插件名", "要跳轉的activity的包名+名字");
RePlugin.startActivity(this, intent);
//或者
RePlugin.startActivity(v.getContext(), new Intent(), "com.jumu.application",
"com.jumu.activity.LoginActivity");
插件的開發
插件的開發和正常app是一樣的,隻需要多做以下步驟: 在project的gradle中加入
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
app中 gradle加入
apply plugin: 'replugin-plugin-gradle'
repluginPluginConfig {
pluginName = "plugin_outer"
hostApplicationId = "com.xiaoqi.replugindemo"
hostAppLauncherActivity = "com.xiaoqi.replugindemo.MainActivity"
}
dependencies {
compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.1'
....
}
這樣其實就已經完成了插件的制作,隻需生成apk即可。
插件與宿主的互動
通過反射,例如:
private void initView() {
mTv = (TextView) findViewById(R.id.tv);
Class<Context> contextClass = (Class<Context>) RePlugin.getHostContext().getApplicationContext().getClass();
try {
Field field = contextClass.getField("a");
int a = field.getInt(RePlugin.getHostContext().getApplicationContext());
mTv.setText("" + a);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
注意點:
1、與virtualapk不同的是,360的插件是可以獨立安裝的 2、跳轉方式不能直接使用startActivity 3、插件的資源名不像virtualapk,可以重名
demo宿主位址:https://github.com/xiaoqiAndroid/RePluginDemo 插件位址: https://github.com/xiaoqiAndroid/Plugin