1. 程式人生 > >android外掛化框架-Replugin

android外掛化框架-Replugin

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