大概

在项目整合的过程中,要使用到插件化,听说360的RePlugin 还不错,所以就按照文档学习了一下,在此记录一下里面的坑。
项目地址:https://github.com/Qihoo360/RePlugin

首先,我们需要Replugin有一个简单的认识,它是一个框架,你开发的app可以作为插件直接安装到宿主app中,直接完美运行。而这个插件可以随时安装和卸载,非常方便。对于需要频繁更新的app或者使用频率比较低的模块,可以使用RePlugin,做到及时更新和用时加载。而且它的文档看上去还比较清晰,而且都是中文的,这个国内的人应该都比较喜欢。

所以我们需要提取两个重量级的概念:宿主APP和插件APP。

宿主APP主要是个壳子,用来作为插件app运行的容器
而插件APP可以是我们开发的一个个模块,然后你把模块扔到宿主app中安装,解压,然后就可以用其中的业务了。

配置

新建项目,项目根目录build.gradle中配置如下信息:版本随时查看官网

buildscript {ext.kotlin_version = '1.3.20'repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.1.4'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"//这个是用于生成宿主app的gradle插件classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'//这个是用于生成插件app的gradle插件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

我们现在将app module作为宿主app,因此需要将app build.gradle做如下配置:

android {.....
}//启用宿主插件
apply plugin: 'replugin-host-gradle'repluginHostConfig {/*** 是否使用 AppCompat 库* 不需要个性化配置时,无需添加*/useAppCompat = true/*** 背景不透明的坑的数量* 不需要个性化配置时,无需添加*/countNotTranslucentStandard = 6countNotTranslucentSingleTop = 2countNotTranslucentSingleTask = 3countNotTranslucentSingleInstance = 2
}dependencies {//.... 其他配置//引用relugin-host-lib 宿主   implementation 'com.qihoo360.replugin:replugin-host-lib:2.2.4'}

此时需要配置repluginHostConfig,宿主配置,抄一下即可。但是 apply plugin: 'replugin-host-gradle'的位置必须要在android{}模块下面,这是Replugin必须的,至于为什么,官方wiki中描述为 防止出现无法读取applicationId,导致生成的坑位出现异常

然后配置Application,有两种方式:

public class MainApplication extends RePluginApplication {}

或者:

public class MainApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);RePlugin.App.attachBaseContext(this);....}@Overridepublic void onCreate() {super.onCreate();RePlugin.App.onCreate();....}@Overridepublic void onLowMemory() {super.onLowMemory();/* Not need to be called if your application's minSdkVersion > = 14 */RePlugin.App.onLowMemory();....}@Overridepublic void onTrimMemory(int level) {super.onTrimMemory(level);/* Not need to be called if your application's minSdkVersion > = 14 */RePlugin.App.onTrimMemory(level);....}@Overridepublic void onConfigurationChanged(Configuration config) {super.onConfigurationChanged(config);/* Not need to be called if your application's minSdkVersion > = 14 */RePlugin.App.onConfigurationChanged(config);....}
}

build 之后,我这边报了一个错误:

No signature of method: com.android.build.gradle.internal.scope.VariantScopeImpl.getMergeAssetsTask()
is applicable for argument types: () values: []

查了资料,是说我的gradle版本存在问题,这个应该是比较尴尬的问题了,也是比较头疼的问题了。解决方案基本如下,强制规定gradle版本:

 //更改gradle版本classpath 'com.android.tools.build:gradle:3.1.4'//gradle/wrapper/gradle-wrapper.properties 下更改distributionUrl路径   distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip

编译通过之后,即可安装,成为了宿主app。

插件APP

我们在项目中新建一个module oneplugin作为子app,作为插件App。在oneplugin的build中需要配置一下插件。

android {defaultConfig {applicationId "com.xing.oneplugin"//....}
}dependencies {//.... 其他依赖// 用于插件的replugin-plugin-libimplementation 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
}//这个和宿主的不一样
//应用到插件中的
//也需要用到android{}配置下面
apply plugin: 'replugin-plugin-gradle'//插件配置
repluginPluginConfig  {//插件名pluginName = "plugin1"//宿主app的包名hostApplicationId = "com.xing.pluginlearn"//宿主app的启动activityhostAppLauncherActivity = "com.xing.pluginlearn.MainActivity"}

然后先尝试将oneplugin安装一下,得到如下图:

然后将oneplugin打包apk出来
然后我的问题就出现这里:

我先选择了oneplugin模块,尝试使用build --> Build Bundle(s)/ APK(s) --> Build APK(s) 打包之后,但是在接下来的操作中,一直没有运行成功,后来检查中发现,原来这种打包方法,一直打的是app module的包,而我们需要oneplugin包应该怎么打呢? 有两种方法:

  1. 直接使用gradle命令
    gradlew :oneplugin:assembleRelease
    然后可以在oneplugin\build\outputs\apk\release 获取到oneplugin release版本
  1. 选择Build Variants 选择release版本,然后点击运行,其实可以在相同的路径下找到release版本包的:

宿主&插件安装

获取到chajianapp之后,需要将它导入手机内存卡中(这次是最简单的模式,默认从内存卡中安装),现在来修改宿主app代码:
主界面如下:

对应的三个方法分别为:

//安装插件private fun loadPlugin() {//安装插件 ///sdcard/oneplugin-debug.apk 是插件路径pluginInfo = RePlugin.install("/sdcard/oneplugin-debug.apk")if(pluginInfo != null) {//预加载插件RePlugin.preload(pluginInfo)Toast.makeText(this,"install success", Toast.LENGTH_LONG).show()}else{Toast.makeText(this, "uninstall !!!", Toast.LENGTH_LONG).show()}}//启动插件fun startActivityForPlugin(view:View) {val intent = Intent()//参数一: 我插件包的包名//参数二:  我插件包里面需要启动的类intent.component = ComponentName("com.xing.oneplugin","com.xing.oneplugin.MainActivity")RePlugin.startActivity(this, intent)}// 卸载插件fun unInstall(view:View) {  // 此处pugin1 是我定义插件包里面build.gradle repluginPluginConfig#pluginNameval result = RePlugin.uninstall("plugin1")Log.i("TAG","uninstall result : $result" )}

然后我们看图:

最终,我们完成了此次的插件化加载。按照教程来说并不是很难,主要是有些坑比较坑爹,这一次也初步完成了RePlugin初次探究,接下来的时间里面,我们会深入探讨一下RePlugin深层次的用法。
项目的练习地址为:https://github.com/Microhx/PluginLearn

360 RePlugin 初探相关推荐

  1. 360 Replugin运行配置(一)

    主程序接入Replugin 1. 添加Replugin Host Gradle依赖 在项目根目录里的build.gradle(不是app/build.gradle)中添加replugin-host-g ...

  2. 360 RePlugin插件化-项目接入

    RePlugin是一套完整的.稳定的.适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出"全面插件化"(全面特性.全面兼容.全面使 ...

  3. 10分钟快速集成360 RePlugin

    1.下载官网demo  https://github.com/Qihoo360/RePlugin/tree/master 2.创建宿主程序 host (1)build.gradl (Project) ...

  4. 360手机卫士插件化RePlugin今日开源,官方全面解读

    作者:张炅轩,360手机卫士·客户端技术专家 写在前面 "RePlugin将在6月底开源,这将是我们献给安卓世界最好的礼物."当我们宣布这一消息时,心中的激动,无以言表.是的,三年 ...

  5. 【原创】360购物小蜜的背后:探推荐引擎初探

    360购物小蜜的背后:探推荐引擎初探 作者:jxy (360电商技术组) 相信经常上网的小伙伴,已经习惯了网站为大家做出的各种个性化推荐:京东会推荐你喜欢的电子设备,淘宝会推荐你爱吃的零食,爱奇艺为你 ...

  6. android 360replugin,360插件框架RePlugin的坑

    6月30号360新开源了一个插件开发框架RePlugin,然而文档不全,根据360的文档你做出来的项目一编译就是一大堆错误,因为很多需要配置的东西在360的插件开发文档里根本就没有,我在这里记录一下给 ...

  7. Android自定义View初探(二)——仿360垃圾清理

    明天就是五一劳动节了,在这里先祝各位程序猿劳动节快乐,别在加班了! 自从尝试过写自定义View(Android自定义View初探(一)--饼图)之后,每当看到别人的应用时,总是在想别人的实现方式,或许 ...

  8. 360 java插件设置_360插件化方案RePlugin初体验

    前天跟朋友聊天提到他们要做个跟360插件化方案类似的框架,领导让他们先了解一下360的实现思路,我也就跟着尝试了一下. RePlugin 是一套完整的.稳定的.适合全面使用的,占坑类插件化方案,由36 ...

  9. 360私有云平台Elasticsearch服务初探

    Elasticsearch Elasticsearch 是一款基于Apache Lucene框架构建的开源的.分布式的.可扩展的.(准)实时的文档存储和搜索引擎.在提供搜索服务以及日志分析方面已经日趋 ...

  10. 360度全景VR摄像机初探

    本文结合OpenGLES的知识,在IOS平台上对于VR全景视屏的制作原理做了初步的探索. 源码地址:点这里

最新文章

  1. 创业计划书模板(周鸿祎口述)
  2. AI时代的GitHub,这个陆奇看好的方向,终于有人做了
  3. 学python的心得体会-Python学习心得
  4. linux常用命令以及相关说明
  5. 使用 mock 数据在本地运行 SAP Fiori Elements 应用的工作原理
  6. bzoj 1015 并查集
  7. Why is processing a sorted array faster than an unsorted array?
  8. 企业战略咨询方法:学习SWOT分析
  9. python表格写操作单元格合并
  10. 2016年事记与感悟
  11. linux下LAMP环境的搭配
  12. Node on Mac 初步
  13. gmoj 6842. 【2020.11.5提高组模拟】淘淘蓝蓝之扮猪吃愉悦
  14. 事务故障、介质故障、系统故障恢复方法及区别
  15. python逆向切片理解
  16. 模拟电路设计(39)---一文搞懂直流电源EMI滤波器
  17. 【自动驾驶摸爬滚打路】自动驾驶仿真软件SCANeR 001初相识
  18. Re23:读论文 How Does NLP Benefit Legal System: A Summary of Legal Artificial Intelligence
  19. 1.ffmpge的移植
  20. MySQL中针对SQL语句优化

热门文章

  1. php如何打包成apk,windows下PHP批量生成打包android程序APK
  2. Excel VBA函数和过程调用方法总结(跨文件调用函数和过程)
  3. 辐射定标、辐射校正、大气校正、正射校正概念
  4. [lammps教程]OVITO绘制原子应力云图
  5. access建立er图_关于ER图的快速生成 | 学步园
  6. 图解TCPIP 学习笔记(一)
  7. 《普林斯顿微积分读本》 第二章 三角学回顾
  8. oracle同音字模糊查询,已释甲骨文会意字研究.pdf
  9. 泰文Unicode编码表及排版规则
  10. 「Font」- 设置 Fallback 字体(如果字体 A 中不存在某个字符,则从字体 B 中加载该字符) @20210212