360插件化方案RePlugin学习笔记-外置插件
本文介绍一下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学习笔记-外置插件相关推荐
- 360 java插件设置_360插件化方案RePlugin初体验
前天跟朋友聊天提到他们要做个跟360插件化方案类似的框架,领导让他们先了解一下360的实现思路,我也就跟着尝试了一下. RePlugin 是一套完整的.稳定的.适合全面使用的,占坑类插件化方案,由36 ...
- 滴滴插件化方案 VirtualApk 源码解析
本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/75000580 本文 ...
- 爱奇艺开源轻量级插件化方案 Neptune
爱奇艺近日开源了其轻量级插件化方案 Neptune,项目地址:https://github.com/iqiyi/Neptune 插件化框架可以在主程序不重新安装的情况下,针对单个业务模块进行动态加载达 ...
- Cordova插件使用和开发学习笔记
Cordova插件使用和开发学习笔记 1. Cordova插件开发 1.1 环境搭建 1.2 插件初始化 1.3 插件完善 1.4 plugin.xml 2. Cordova插件使用 2.1 创建项目 ...
- Android插件化原理(一)Activity插件化
title: " Android插件化原理(一)Activity插件化" date: 2018-5-28 00:16 photos: https://s2.ax1x.com/201 ...
- 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- [Android]用架构师角度看插件化(1)-Replugin入门剖析
多谢一直以来的支持,组件化的内容,应该会有一段时间不再更新,一些非常关键的技术将会在我将要出版的组件化书籍中提及. 组件化模块化的开发适合于中小型企业的业务叠加,和代码重用.而插件化的开发将组件化和模 ...
- android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程
本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...
- [Android]用架构师角度看插件化(2)-Replugin 唯一hook点
Replugin,为何我选择要研究这个的插件呢?很大的原因是因为它的介绍中说明,他只会有一个hook点. 一.Hook hook点是什么? 我们入门Android的时候,一定会看到过这个图,但是你确定 ...
- [Android]用架构师角度看插件化(3)-Replugin 需要占坑跳转?
一.占坑 什么是占坑?为什么要占坑? Android插件化中,从一个插件Activity跳转到不同插件的Activity的时候,是否可以能正常跳转成功? 声明Activity需要配置什么? 声明Act ...
最新文章
- 从当前日期算起,获取几天前的日期和几个月前的日期
- 别再说学不会:超棒的Numpy可视化学习教程来了
- android系统休眠发广播,Android - BroadcastReceiver
- hibernate动态表名映射
- Dialog外部点击事件
- oracle 存储过程的基本语法 及注意事项
- leetCode 338
- 陶哲轩实分析定义8.5.5的一个注记
- 线性代数知识汇总(转载)
- 【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容
- CentOS7 安装MongoDB 3.0服务
- Python colormap库的安装和使用
- asp.net excel导入 wps_4种Excel格式的转换方法,总有一种适合你!赶紧试试看
- 2.5 不匹配数据划分的偏差和方差
- ArcEngine数据编辑--选择要素
- sql语句学习之having用法
- 动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)
- ABB ACS 510 1.5-5.5kw驱动板图纸 PDF格式
- 2000坐标系xy坐标几位_2000国家大地坐标系
- 计算机cpu执行时间 指令条数的单位,计算机原理2015年10月真题(02384)