Replugin插件化相关

Replugin是一款灵活且稳定的Android插件化框架,具备无需主程序升级即可更新插件、高稳定性、丰富的特性支持以及简单集成等优点。然而,它也存在一些缺点,如遇到未知插件问题难以解决、首次加载插件速度慢以及特定包插件化兼容性问题。详细信息可参考官方wiki。
摘要由CSDN通过智能技术生成
一、集成步骤
第 1 步:添加 RePlugin Plugin Gradle 依赖

在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle依赖:
buildscript {
    dependencies {
       classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
    }
}
第 2 步:添加 RePlugin Plugin Library 依赖

在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖:
apply plugin: 'replugin-plugin-gradle'
repluginPluginConfig {
    pluginName = "当前插件名称"
    hostApplicationId = " com.jtv.replugin"
  hostAppLauncherActivity = "com.jtv.replugin.MainActivity"
}
dependencies {
    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.0
}

第 3 步:在清单文件中,注册插件名称

<meta-data
    android:name="com.qihoo360.plugin.name"
    android:value="设置的插件名" />
Intent intent = new Intent();
第 4 步:跳转宿主中的地图页面

String   longitude=
SharedPrefUtils.get(RePlugin.getHostContext(),"longitude", "");
String   latitude= SharedPrefUtils.get(RePlugin.getHostContext(),"latitude", "");
intent.setComponent(new ComponentName(RePlugin.getHostContext().getPackageName(), "com.jtv.maplibrary.LocationActivity"));
intent.putExtra("latitude"," latitude);
intent.putExtra("longitude", longitude);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.this.startActivity(intent);



二、插件使用注意事项:

1.插件中共享数据以jar的方式放在每一个插件中。

2.插件中调用宿主中的上下文:RePlugin.getHostContext()

3.SharedPrefUtils,工具类,可以获取宿中保存的信息(例如:登录成功的信息)

String userInfo = SharedPrefUtils.get(RePlugin.getHostContext(), "userInfo", "");

4.插件中声明的权限无效,所有权限声明必须放在宿主中

5.插件化无法与宿主共享v7包,若插件化要使用,必须单独引入

6.若插件中包含so文件,宿主需要有该so文件或者空包

7.插件中跳转宿主:

Intent intent = new Intent();
intent.setComponent(new ComponentName(RePlugin.getHostContext().getPackageName(), "com.qihoo360.replugin.sample.host.MainActivity"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.this.startActivity(intent);

8.插件间互相跳转

Intent intent = new Intent();
intent.setComponent(new ComponentName("demo2",   "com.qihoo360.replugin.sample.demo2.activity.for_result.ForResultActivity"));
MainActivity.this.startActivityForResult(intent, REQUEST_CODE_DEMO2);

9.插件安装和卸载,必须重启杀死进程,清除缓存。

插件引入规范
1:代码绝对要完全隔离;
2:是通信全部走aidl(RePlugin提供了Binder);
3:aidl接口要严格管控,每一个接口都要设计好,不能随便修改,顺序不能乱,发出去就定了;
4:插件和宿主之间的消息传递,一律用Bundle;宿主内传递,插件内传递,随便;
5:当插件和宿主直接有回调时,走本地广播(RePlugin提供了LocalBroadCast的封装,支持跨进程,也支持本进程);
6:在开发插件的时候,当独立进程来设计(即便当前是同一个进程,也有有这种意识);
7.如果你想花哨的用,就先看一下代码,熟悉整体架构,这样,遇到问题的时候,能定位解决。

优点:

1.极其灵活:主程序无需升级即可升级内部插件,外置插件放置在服务端统一管理升级,内部跳转无需再安装

2.非常稳定:Hook点仅有一处(ClassLoader),无任何Binder Hook!如此可做到其崩溃率仅为“万分之一”,并完美兼容市面上近乎所有的Android ROM

3.特性丰富:支持近乎所有在“单品”开发时的特性。包括静态Receiver、Task-Affinity坑位、自定义Theme、进程坑位、AppCompat、DataBinding等

4.易于集成:无论插件还是主程序,只需“数行”就能完成接入

缺点:

1.未知相关插件问题出现自己无法解决,查询官方若无相应的解决方案,只能挂起或者自己做规避操作,无法彻底解决

2.初次打开插件apk速度较慢,只能添加等待框,无法进一步优化

3.目前发现引入身份证识别包插件化后无法打包,未在官方文档找到答案

详情可参考https://github.com/Qihoo360/RePlugin/wiki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值