本文介绍一下RePlugin外置插件使用方式,使用的是官方demo2中的模拟配置。

步骤一:把需要作为外置插件的项目打包生成demo1.apk

步骤二:把apk拷贝到宿主项目assets/xxx/下,xxx命名随意,保持一致即可

这里是跟官方demo一样,结构如图:

步骤三:在触发下载外置插件的地方调用代码

    //判断是否已安装demo1插件,如未安装就下载安装,如已安装跳转页面if (RePlugin.isPluginInstalled("com.test.qby.myapplication")) {RePlugin.startActivity(this, RePlugin.createIntent("com.test.qby.myapplication", "com.test.qby.myapplication.plugin.PluginActivity"))} else {Toast.makeText(this@MainActivity, "正在下载插件,请在下载完成后重新尝试!", Toast.LENGTH_SHORT).show()val pd = ProgressDialog.show(this@MainActivity, "Installing...", "Please wait...", true, true)Thread {downApk()pd.dismiss()}.start()}/*** 模拟安装或升级(覆盖安装)外置插件* 为方便演示,外置插件临时放置到Host的assets/external目录下*/private fun downApk() {val demo1Apk = "demo1.apk"val demo1apkPath = "external" + File.separator + demo1Apk// 文件是否已经存在?直接删除重来val pluginFilePath = filesDir.absolutePath + File.separator + demo1Apkval pluginFile = File(pluginFilePath)if (pluginFile.exists()) {FileUtils.deleteQuietly(pluginFile)}// 开始复制copyAssetsFileToAppFiles(demo1apkPath, demo1Apk)var info: PluginInfo? = nullif (pluginFile.exists()) {info = RePlugin.install(pluginFilePath)}runOnUiThread({if (info != null) {Toast.makeText(this@MainActivity, "install success!", Toast.LENGTH_SHORT).show()} else {Toast.makeText(this@MainActivity, "install external plugin failed", Toast.LENGTH_SHORT).show()}})}/*** 从assets目录中复制某文件内容* @param  assetFileName assets目录下的Apk源文件路径* @param  newFileName 复制到/data/data/package_name/files/目录下文件名*/private fun copyAssetsFileToAppFiles(assetFileName: String, newFileName: String) {var ins: InputStream? = nullvar fos: FileOutputStream? = nullval buffsize = 1024try {ins = this.assets.open(assetFileName)val allLength = ins!!.available()fos = this.openFileOutput(newFileName, Context.MODE_PRIVATE)var byteCount = 0var length = 0val buffer = ByteArray(buffsize)while (byteCount != -1) {fos!!.write(buffer, 0, byteCount)byteCount = ins!!.read(buffer)length += byteCount//下载进度Log.e("MainActivity","总长度="+ Formatter.formatFileSize(this,allLength.toLong())+"下载进度="+Formatter.formatFileSize(this,length.toLong()))}fos!!.flush()} catch (e: Exception) {e.printStackTrace()} finally {try {ins!!.close()fos!!.close()} catch (e: Exception) {e.printStackTrace()}}}}

这样就已经完成了外置插件的下载和页面的跳转,实际应用中应当是从服务器下载。

注意:此时,只能使用插件的包名com.test.qby.myapplication来进行页面跳转。

RePlugin还提供了另外一种方式来进行跳转:【别名】

1.在插件清单文件中配置插件别名、插件版本

<meta-dataandroid:name="com.qihoo360.plugin.name"android:value="plugin1"/><meta-dataandroid:name="com.qihoo360.plugin.version.var"android:value="100"/>

修改其中的value值,即可修改插件别名,插件版本,版本号自行定义。

官方提示:

详细参考 【插件的信息】

2.重复步骤一、步骤二

3.宿主跳转代码

RePlugin.startActivity(this, RePlugin.createIntent("plugin1", "com.test.qby.myapplication.plugin.PluginActivity"))

当然,你依然使用包名进行跳转也是可以的。

以上仅个人学习记录,如有疏漏或谬误,欢迎留言交流!

360插件化方案RePlugin学习笔记-外置插件相关推荐

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

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

  2. 滴滴插件化方案 VirtualApk 源码解析

    本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/75000580 本文 ...

  3. 爱奇艺开源轻量级插件化方案 Neptune

    爱奇艺近日开源了其轻量级插件化方案 Neptune,项目地址:https://github.com/iqiyi/Neptune 插件化框架可以在主程序不重新安装的情况下,针对单个业务模块进行动态加载达 ...

  4. Cordova插件使用和开发学习笔记

    Cordova插件使用和开发学习笔记 1. Cordova插件开发 1.1 环境搭建 1.2 插件初始化 1.3 插件完善 1.4 plugin.xml 2. Cordova插件使用 2.1 创建项目 ...

  5. Android插件化原理(一)Activity插件化

    title: " Android插件化原理(一)Activity插件化" date: 2018-5-28 00:16 photos: https://s2.ax1x.com/201 ...

  6. 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. [Android]用架构师角度看插件化(1)-Replugin入门剖析

    多谢一直以来的支持,组件化的内容,应该会有一段时间不再更新,一些非常关键的技术将会在我将要出版的组件化书籍中提及. 组件化模块化的开发适合于中小型企业的业务叠加,和代码重用.而插件化的开发将组件化和模 ...

  8. android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程

    本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...

  9. [Android]用架构师角度看插件化(2)-Replugin 唯一hook点

    Replugin,为何我选择要研究这个的插件呢?很大的原因是因为它的介绍中说明,他只会有一个hook点. 一.Hook hook点是什么? 我们入门Android的时候,一定会看到过这个图,但是你确定 ...

  10. [Android]用架构师角度看插件化(3)-Replugin 需要占坑跳转?

    一.占坑 什么是占坑?为什么要占坑? Android插件化中,从一个插件Activity跳转到不同插件的Activity的时候,是否可以能正常跳转成功? 声明Activity需要配置什么? 声明Act ...

最新文章

  1. 从当前日期算起,获取几天前的日期和几个月前的日期
  2. 别再说学不会:超棒的Numpy可视化学习教程来了
  3. android系统休眠发广播,Android - BroadcastReceiver
  4. hibernate动态表名映射
  5. Dialog外部点击事件
  6. oracle 存储过程的基本语法 及注意事项
  7. leetCode 338
  8. 陶哲轩实分析定义8.5.5的一个注记
  9. 线性代数知识汇总(转载)
  10. 【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容
  11. CentOS7 安装MongoDB 3.0服务
  12. Python colormap库的安装和使用
  13. asp.net excel导入 wps_4种Excel格式的转换方法,总有一种适合你!赶紧试试看
  14. 2.5 不匹配数据划分的偏差和方差
  15. ArcEngine数据编辑--选择要素
  16. sql语句学习之having用法
  17. 动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)
  18. ABB ACS 510 1.5-5.5kw驱动板图纸 PDF格式
  19. 2000坐标系xy坐标几位_2000国家大地坐标系
  20. 计算机cpu执行时间 指令条数的单位,计算机原理2015年10月真题(02384)

热门文章

  1. kubectl 命令详解(三十三):rollout resume
  2. mysql中的count函数解释
  3. k210应用8-使用DMAC实现存储器与存储器之间的高速数据传输
  4. 【免费办公软件】万彩办公大师教程丨文件批量解压工具
  5. [三剑客]老男孩教育-三剑客笔试题集合
  6. 解决css修改但是没有反应
  7. phpstudy安装yar扩展
  8. Markdown 图片排版
  9. blender导入png图片不透明 | png贴图在blender中有黑底
  10. ArrayList集合源码浅析