美文网首页插件化
RePlugin插件化框架之外置插件

RePlugin插件化框架之外置插件

作者: 潇潇code | 来源:发表于2017-07-17 18:09 被阅读114次

    _____________________插件端_________________________________

    1.在项目根目录build.gradle下添加

    dependencies {

    classpath'com.android.tools.build:gradle:2.3.2'

    classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.1.5'

    }


    2.在module下的build.gradle下添加

    apply plugin:'replugin-plugin-gradle'

    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.1.5'


    3.在插件Manifest下添加(否则无法打开插件)

    <--插件名称-->

    android:name="com.qihoo360.plugin.name"

    android:value="plugin1"/>

    <--插件版本-->

    android:name="com.qihoo360.plugin.version.ver"

    android:value="1"/>


    4.插件中打开宿主的activity

    Intent intent = new Intent();

    intent.setComponent(new ComponentName("com.redfinger.app", "com.redfinger.app.activity.LoginActivity"));

    startActivity(intent);


    _________________宿主________________________

    1.在项目根目录build.gradle下添加

    dependencies {

    classpath 'com.android.tools.build:gradle:2.3.2'

    compile'com.qihoo360.replugin:replugin-host-lib:2.1.5'

    }


    2.在module下的build.gradle下添加

    apply plugin: 'replugin-host-gradle'//这个放在Android后面

    //如果插件中用到了AppCompactTheme那么还要在当前build.gradle中加上

    repluginHostConfig {

    useAppCompat = true

    }

    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.1.5'


    3.修改Application(注:添加的放在super后的第一行)

    @Override

    protected void attachBaseContext(Context base) {

    super.attachBaseContext(base);

    RePlugin.App.attachBaseContext(this);

    }

    @Override

    public void onLowMemory() {

    super.onLowMemory();

    RePlugin.App.onLowMemory();

    }

    @Override

    public void onTrimMemory(int level) {

    super.onTrimMemory(level);

    RePlugin.App.onTrimMemory(level);

    }

    @Override

    public void onConfigurationChanged(Configuration config) {

    super.onConfigurationChanged(config);

    RePlugin.App.onConfigurationChanged(config);

    }


    4.安装更新插件都是同一个方法install

    注:更新时的插件包要改版本号,不然就是覆盖(详见插件端的第3条)更新插件后要重启APP生效

    PluginInfopluginInfo = RePlugin.install("/sdcard/replugin_new.apk");


    5.卸载插件

    RePlugin.unInstall("plugin01")


    6.判断插件是否安装

    PluginInfoinfo = MP.getPlugin("plugin01", true);


    7.宿主打开插件中的四大组件

    RePlugin.startActivity(MainActivity.this,RePlugin.createIntent("plugin01", "com.dg.replugindemo01.MainActivity"));

    PluginServiceClient.bindService(RePlugin.createIntent( "exam", "AbcService"), mServiceConn);

    PluginServiceClient.bindService(RePlugin.createIntent( "exam", "AbcService"), mServiceConn);

    PluginProviderClient.query(xxx);


    8.宿主调用插件方法

    A)fetchComponentList(String pluginName);//获取插件的组件列表

    ComponentList cl = RePlugin.fetchComponentList(plugin);

    B)fetchPackageInfo(String pluginName);//获取插件的包信息

    PluginInfo info=RePlugin.getPluginInfo("");

    C)fetchResources(String pluginName);//获取插件的资源信息

    Resources resources=RePlugin.fetchResources("");

    D)fetchClassLoader(String pluginName);//获取插件的ClassLoader对象

    ClassLoader classLoader=RePlugin.fetchClassLoader("");

    E)fetchContext(String pluginName);//获取插件的Context对象

    Context context=RePlugin.fetchContext("");

    F)fetchBinder(String pluginName, String module, String process);

    //通过插件里的Plugin类,获取插件定义的IBinder

    IBinder binder=RePlugin.fetchBinder("","","");


    9.启动、绑定插件的Service

    PluginServiceClient.bindService(RePlugin.createIntent(

    "exam", "AbcService"),mServiceConn);

    10.调用RePlugin.install()方法,其返回值就是“新版本插件信息”使用RePlugin.getPlugin()方法,得到的是“当前正在运行的”插件信息(而非新插件的)


    11.在这个“当前正在运行的”插件信息上,再调用getPendingUpdate()方法,则可以拿到这个“新版本插件信息”了。

    PluginInfo pi = RePlugin.getPluginInfo("plugin01");

    if (pi != null) {

    PluginInfo newPi = pi.getPendingUpdate();

    if (newPi != null) {

    //TODO

    } else {

    // No update

    }

    }

    相关文章

      网友评论

        本文标题:RePlugin插件化框架之外置插件

        本文链接:https://www.haomeiwen.com/subject/twgnhxtx.html