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,可以重名