RePlugin插件化-内置插件 实战

Replugin的插件架构 分成内置插件和外置插件两种。

内置插件:将apk修改成jar后,直接放入assets/plugins包下。

外置插件:可以将apk放到sd卡或者网络下载进行安装使用。

这一篇文章是关于内置插件的实战(尽量按照如下配置,否则总是有意想不到的问题)

宿主工程(配置)

第一步:项目gradle添加插件

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'
    
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
第二步:app gradle中添加配置

首先要在android{}中将buildToolsVersion版本加上

android {
    compileSdkVersion 26
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.malei.pluginhost"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }   
}
然后在android{}的后面添加如下配置:

apply plugin: 'replugin-host-gradle'
repluginHostConfig {
    useAppCompat = true
}
最后在dependencies中添加依赖包

compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'
第三步:在Applicaiton进行RePluginApk进行初始化工作

public class MyApplication extends RePluginApplication {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

        // FIXME 允许接收rpRunPlugin等Gradle Task,发布时请务必关掉,以免出现问题
        RePlugin.enableDebugger(base, BuildConfig.DEBUG);
    }

    // ----------
    // 自定义行为
    // ----------
    /**
     * RePlugin允许提供各种“自定义”的行为,让您“无需修改源代码”,即可实现相应的功能
     */
    @Override
    protected RePluginConfig createConfig() {
        RePluginConfig c = new RePluginConfig();

        // 允许“插件使用宿主类”。默认为“关闭”
        c.setUseHostClassIfNotFound(true);

        // FIXME RePlugin默认会对安装的外置插件进行签名校验,这里先关掉,避免调试时出现签名错误
        c.setVerifySign(!BuildConfig.DEBUG);

        // 针对“安装失败”等情况来做进一步的事件处理
        c.setEventCallbacks(new HostEventCallbacks(this));

        // FIXME 若宿主为Release,则此处应加上您认为"合法"的插件的签名,例如,可以写上"宿主"自己的。
        // RePlugin.addCertSignature("AAAAAAAAA");

        return c;
    }

    @Override
    protected RePluginCallbacks createCallbacks() {
        return new HostCallbacks(this);
    }

    /**
     * 宿主针对RePlugin的自定义行为
     */
    private class HostCallbacks extends RePluginCallbacks {

        private static final String TAG = "HostCallbacks";

        private HostCallbacks(Context context) {
            super(context);
        }

        @Override
        public boolean onPluginNotExistsForActivity(Context context, String plugin, Intent intent, int process) {
            // FIXME 当插件"没有安装"时触发此逻辑,可打开您的"下载对话框"并开始下载。
            // FIXME 其中"intent"需传递到"对话框"内,这样可在下载完成后,打开这个插件的Activity
            if (BuildConfig.DEBUG) {
                Log.d(TAG, "onPluginNotExistsForActivity: Start download... p=" + plugin + "; i=" + intent);
            }
            return super.onPluginNotExistsForActivity(context, plugin, intent, process);
        }

    }

    private class HostEventCallbacks extends RePluginEventCallbacks {

        private static final String TAG = "HostEventCallbacks";

        public HostEventCallbacks(Context context) {
            super(context);
        }

        @Override
        public void onInstallPluginFailed(String path, InstallResult code) {
            // FIXME 当插件安装失败时触发此逻辑。您可以在此处做“打点统计”,也可以针对安装失败情况做“特殊处理”
            // 大部分可以通过RePlugin.install的返回值来判断是否成功
            if (BuildConfig.DEBUG) {
                Log.d(TAG, "onInstallPluginFailed: Failed! path=" + path + "; r=" + code);
            }
            super.onInstallPluginFailed(path, code);
        }

        @Override
        public void onStartActivityCompleted(String plugin, String activity, boolean result) {
            // FIXME 当打开Activity成功时触发此逻辑,可在这里做一些APM、打点统计等相关工作
            super.onStartActivityCompleted(plugin, activity, result);
        }
    }
}
第四步:启动插件apk

this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("com.malei.pluginson", "com.malei.pluginson.MainActivity"));
    }
});

插件工程(配置)

在项目gradle中添加依赖

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
然后在app gradle 添加配置

// 这个plugin需要放在android配置之后,因为需要读取android中的配置项
apply plugin: 'replugin-plugin-gradle'
repluginPluginConfig {
    pluginName = "son"
    hostApplicationId = "com.malei.pluginson"  //插件包名
    hostAppLauncherActivity = "com.malei.pluginhost.MainActivity"  //宿主包名
}

最后添加依赖

compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
完成,记着将realse版本的apk,修改成jar就可以了



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值