前言

继上次爬完了热修复的坑位,中途爬了各种各样的坑。今天我们来说说插件化Replugin的坑位。Replugin刚出的时候我就看过了。第一次看的时候可能心态不好。没看懂= =第二次重头在看,发现蛮简单的,可能一两个小时就搞定了。但是这玩意出来我就知道了。今天才整理。这就可想而知,坑位多的有点可怕。好了。下面,我们一一整理这些各式各样的坑。

主程序接入

gradle的依赖

在整个项目的build.gradle中添加如下代码:

buildscript {dependencies {classpath 'com.qihoo360.replugin:replugin-host-gradle:2.1.6'}
}

library的依赖

在app的build.gradle中添加如下代码:

apply plugin: 'replugin-host-gradle'
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:25.3.0'compile 'com.qihoo360.replugin:replugin-host-lib:2.1.6'
}repluginHostConfig {useAppCompat = true
}

这些务必要加载最底部。防止编译的时候读不到数据。

配置我们的application

关于application这一说,我们可以不用参考官网的做法,直接改成如下代码即可:


/*** Created by Angel on 2017/7/12.*/
public class MainApplication extends RePluginApplication {public void onCreate() {super.onCreate();RePlugin.App.onCreate();RePlugin.enableDebugger(this,true);
//        PluginInfo pi = RePlugin.install(Environment.getExternalStorageDirectory()
//                .getAbsolutePath() + "/demo.apk");
//        if (pi != null) {//            Log.i("plugin----------------", "onCreate: 6666666");
//            RePlugin.preload(pi);
//        }}protected void attachBaseContext(Context base) {super.attachBaseContext(base);//-------------- 开发的时候不验证签名 -----------RePlugin.App.attachBaseContext(this,new RePluginConfig().setVerifySign(false).setPrintDetailLog(true).setUseHostClassIfNotFound(true).setMoveFileWhenInstalling(false));}
}

这边我们基本的接入流程走完了。具体运行我们后面在说。

插件接入

关于插件的接入,这就比主程序简单很多了。

gradle的依赖

在整个项目的build.gradle中添加如下代码:

buildscript {dependencies {classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.1.6'...}
}

library的依赖

在app的build.gradle中添加如下代码:

apply plugin: 'replugin-host-gradle'
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:25.3.0'compile 'com.qihoo360.replugin:replugin-plugin-lib:2.1.6'
}repluginHostConfig {useAppCompat = true
}

这些务必要加载最底部。防止编译的时候读不到数据。

关于插件的配置这就差不多了。具体使用后面说。

安装插件

主程序跳转插件的时候,我们需要进行安装插件。而插件,又分为内置插件和外置插件。官方对插件介绍的比较详细,其实笼统的介绍,很简单,就几句话。

内置插件

内置插件自我认为是比较常用的一种。

添加一个内置插件是非常简单的,甚至可以“无需任何Java代码”。只需两步即可:

  1. 将APK改名为:[插件名].jar
  2. 放入主程序的assets/plugins目录

这样,当编译主程序时,我们的“动态编译方案”会自动在assets目录下生成一个名叫“plugins-builtin.json”文件,记录了其内置插件的主要信息,方便运行时直接获取。

外置插件

上面我也说了,内置插件就够用了。用外置的可能,我认为和热更新这块有关联。当然,这也只是我的假想。具体还有什么其他用处,我就不知道了~

外置插件就一句话,把你插件的outputs下面的apk文件,扔进手机文件里面,即可。

关于插件的问题,我介绍的差不多了。下面就是主程序和插件的互相跳转了。

插件的跳转

插件跳转分为主程序跳转插件和插件跳转主程序。而这个跳转和普通的差别也不是很大,一行代码解决的事。

插件跳主程序

 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setComponent(new ComponentName("com.angel.replugin", "com.angel.replugin.MainActivity"));startActivity(intent);}});

这就是一个插件跳转主程序的代码,是不是很简单。下面我们来看下我们的效果图:

可以看到我们的标题有明显的抖动,这就说明了。我们是2个进程的跳转,而不是在同一个进程里进行跳转。

主程序跳转插件

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {RePlugin.startActivity(MainActivity.this,RePlugin.createIntent("demo", "com.angel.replugin2.Main"));}});

也是非常简单的一个代码。当然这边我们需要注意,插件的包名和activity名称不能和主程序的一模一样。
我们来看一遍效果图:

这样主程序和插件的互相跳转流畅基本走通了。下面我们稍微来说说我所遇到的那些坑位。

Replugin的坑位

我记得我第一次使用的Replugin的版本是2.1.2.当时出现了这么一个情况。插件跳转主程序可以正常跳转,主程序跳转插件出现activity没有在xml注册的情况。这个问题在2.1.3还是2.1.4中修复了。

第二个问题就是在主程序跳转插件时出现activity not found。外置插件不执行如下代码:

  if (pi != null) {Log.i("plugin----------------", "onCreate: 6666666");RePlugin.preload(pi);}

这里会出现pi一直为null的情况,具体自己可以去尝试,应该是2.1.4还是1.5中的问题。

最后一个问题就是在2.1.6中我出现了如下情况:

然后我就去对比了官方的介绍文档,各种配置啊,嗯,明明没毛病么。你让我咋改。然后我就请教了当时和我一直搞这玩意的小伙伴。因为他成功了。我没成功。然后对比了下代码,嗯,的确没问题。我:&%@##@@¥……….

最后发现代码的确没有问题,导致的问题如下:

这边我当时配置的是gradle版本是2.2.2改成2.3.3就可以了。最后运行,binggo。搞定了。

总结

对于Replugin这玩意,虽然360测试了三年多。但是感觉坑也蛮多了。当然还有什么插件跳转插件,以及各种调用和传值的问题。虽然具体不知道插件化的好处是什么,在我所知的范围内。我唯一能够知道的估计也就是,合作开发的时候用插件化,这样可以明显知道这个bug到底出在谁身上= =

360插件化Replugin爬坑之路相关推荐

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

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

  2. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  3. 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理

    上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化.hook系统ClassLoader.插件的 ...

  4. Espressif IDF for VSCode 爬坑之路二:ESP32 的 JTAG 调试(OpenOCD GDB)

    今天我们来探索如何在 Espressif IDF 插件里进行 JTAG 调试.如果还未成功安装与入门 Espressif IDF for VSCode,可以先参考 Espressif IDF for ...

  5. Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目

    Vue 爬坑之路(一)-- 使用 vue-cli 搭建项目 vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https: ...

  6. Django实现一个简单的中间件,不熟悉中间件的爬坑之路

    1.在之前,写过一篇文章,自定义一个简单的中间件,文章链接如下:https://blog.csdn.net/u012561176/article/details/84024073 后面,发现还是有问题 ...

  7. React爬坑之路二:Router+Redux

    上一篇写了Antd和Axios的基本操作 之前大标题到五了那么这篇从六开始 ST也是初学小白可能讲的完全不对 大家当做小说随便读读消遣一下就好 React官网:https://reactjs.org/ ...

  8. React爬坑之路三:Dva

    前两篇写了react各种基本操作和主要概念 但其实没必要那么复杂直接用框架就好啦 这年头前端框架真是一睁眼就多出好几个 傻瓜级教程写的不合理的地方请批评指正 React官网:https://react ...

  9. 低配服务器的个人建站爬坑之路

    @低配服务器的个人建站爬坑之路 低配服务器的个人建站爬坑之路 本文纯手打,转载请说明来源:https://blog.csdn.net/sqm1995/article/details/89374500 ...

  10. android局部动态刷新,RecyclerView的局部刷新爬坑之路简述

    RecyclerView的局部刷新爬坑之路简述,实际上RecyclerView做局部刷新是非常容易的,其实就是使用好带payload参数的这个notifyItemRangeChanged方法,以及ov ...

最新文章

  1. 概率论与数理统计--第三章
  2. linux下配置vnc的方法
  3. (转)Git详解之一:Git起步
  4. SAP S/4HANA装到Docker里的镜像有多大
  5. 汇编语言(十七)之判断三个数是否相等
  6. 十、input与跳转
  7. return两个返回值_异步函数的两个视角
  8. 第10篇:Flowable-BPMN操作流程部署、启动
  9. 腾讯视频如何删除观看记录
  10. LintCode Python 简单级题目 491.回文数
  11. wince只运行一次应用程序
  12. Python socket.send()与socket.sendall()的区别
  13. 用递归求字符串的全组合
  14. opencv3中camshift详解(一)camshiftdemo代码详解
  15. c语言开方不是整数怎么表示,c语言中的开方本人自学c语言,想请问在c中类似开方,取绝对值这类的(也不知道应该算运算符还是函数什么的)都要怎么解决~麻...
  16. VOC 2007数据集结构
  17. 读书笔记-采购与供应链管理(一个实践者的角度)
  18. 通过自定义函数计算阶乘
  19. 常用 javascript广告代码
  20. 5个高质量简历模板网站,免费、免费、免费

热门文章

  1. LeetCode,无它,唯手熟尔(三)
  2. NDB Cluster基本操作
  3. Travelling Salesman Problem(旅行商问题)
  4. IM即时通讯需要解决的问题
  5. STEP2——《数据分析:企业的贤内助》重点摘要笔记(三)——数据录入
  6. 【NOIP2018模拟赛2018.8.28】video
  7. 什么是RF、IF信号
  8. 四级英语口语模拟测试软件,英语四级口语模拟题:非常有用
  9. 电商中的订单号如何实现
  10. C++中endl、ends和flush作用: