RePlugin 是奇虎 360 正在开源的一套完整的、稳定的、适合全面使用的,占坑类插件化方案。其主要优势有:
极其灵活:主程序无需升级(无需在Manifest中预埋组件),即可支持新增的四大组件,甚至全新的插件
非常稳定:Hook点仅有一处(ClassLoader)。其崩溃率仅为“万分之一”,并完美兼容市面上近乎所有的Android ROM
特性丰富:支持近乎所有在“单品”开发时的特性。包括静态Receiver、Task-Affinity坑位、自定义Theme、进程坑位、AppCompat、DataBinding等
易于集成:无论插件还是主程序,只需“数行”就能完成接入
进程任意:可让各组件跑在UI、常驻,甚至是“任意坑位进程”
自由隔离:想隔离就隔离(如不稳定或占资源的插件,易于释放),不想隔离的模块就混用(如各种基础、UI插件,都跑在UI进程内,性能优异)
管理成熟:拥有成熟稳定的“插件管理方案”,支持插件安装、升级、卸载、版本管理,甚至包括进程通讯、协议版本、安全校验等
数亿支撑:有360手机卫士庞大的数亿用户做支撑,三年多的残酷验证,确保App用到的方案是最稳定、最适合使用的
截止2017年6月底,RePlugin的:
插件数 已达102个(其中,核心插件57个)
插件占应用比 高达83%(指把代码资源铺开,插件占整个应用的比例)
年发版次数 高达596次(平均每个工作日发版2-3次)
目前360公司几乎所有的亿级用户量的APP,以及多款主流第三方APP,都采用了RePlugin方案。
支持 Android 2.3+ 及以上版本。
上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化、hook系统ClassLoader、插件的加载,3个模块已经说了两个,在第一篇的最后是插件的加载,当时没有说,一个是因为篇幅的原因,另一个原因是想从插件的安装、加载、插件apk初始化、整体的流程梳理下来,这里虽然没有分析插件的卸载,但是当看完
Replugin实践记录分享: 开源框架不能随便使用,Replugin框架年久失修,参考实现学习实现原理可以,但是如果直接使用到项目中后期维护适配成本太大,直接使用请慎重。 官方链接:https://github.com/Qihoo360/RePlugin Replugin官网提供了详细的使用教程和原理以及demo,demo里面有很多事例,可以参考学习。 自己跑replugin官方提供的demo,
一.概述 通过本篇文章的学习,你将学会: 1.什么是组件化和插件化 2.RePlugin集成到自己的项目中 3.RePlugin的使用 二.组件化和插件化 组件化 组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。 android工程的组件
上一篇唯一插件化Replugin源码及原理深度剖析–初始化之框架核心,我们说了Replugin的整体框架的初始化,但是因为篇幅的缘故还有Hook系统的ClassLoader和插件的加载没有说,那么我们这一篇就来详解的来分析一下Hook这块,本章我们讲从Hook系统ClassLoader的思想和原理进行剖析,如果没有看过上一篇建议先看上一篇 提示:请不要忽略代码注释,由于通畅上下逻辑思维,不太重要的
前言 最近项目代码中有涉及插件的一些功能需求,所以打算自己先练习下RePlugin插件化的相关功能。 官方代码使用流程 首先:RePlugin官方地址,可以去看下官方的文档和示例代码(示例代码可能在自己本地Android Studio上跑不了,是需要修改一些配置文件): app下的build.gradle文件 apply plugin: 'com.android.application' and
业务场景:在插件A 里面,我们想嵌入插件B 的视图。 1,先把插件B 的 Fragment 改造成 View,这样拿到 View 可以直接放到插件A 里面。 2,宿主里面依赖 support 包,其他插件全部不依赖 support 包(provided)。这样各个插件的 Fragment 可以通过反射相互填充了。 3,在插件A 反射调用插件B 的 Fragment 生命周期。 第一种方案,是最直接
问题内容: 我现在两次遇到问题,生产者线程会产生N个工作项,将它们提交给an ,然后需要等待,直到所有N个项都已处理完毕。 注意事项 N事先未知 。如果是这样,我将简单地创建一个然后具有生产者线程,直到完成所有工作。 使用a 是不合适的,因为尽管我的生产者线程需要阻塞(即,通过调用),但 无法表示所有工作都已完成 ,从而导致生产者线程停止等待。 我当前喜欢的解决方案是使用整数计数器,并在提交工作项
我有一些序列化为输出的对象。对象的某些属性需要大量计算,并且需要一些时间才能完成。我正在考虑的是如何指定用户想要获取的属性集,并仅序列化该集合而不是所有属性集。 我已经做了一些研究,很清楚如何仅序列化标记为[Serializable]属性的对象的所需属性,但在我的例子中,标记为[DataContract]的对象仍然存在一些问题。 现在的另一个问题是指定应该序列化的属性集。理想情况下,最好有像XQu
本文向大家介绍Java版插入排序[稳定]相关面试题,主要包含被问及Java版插入排序[稳定]时的应答技巧和注意事项,需要的朋友参考一下 适用于小数组,数组已排好序或接近于排好序速度将会非常快 复杂度:O(n^2) - O(n) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]
问题内容: 我有一个詹金斯实例运行约200个工作。我需要一个插件来显示所有作业的构建统计信息。 每个项目的总构建 失败的 成功 每次构建的平均时间。 搜索了很多,但是找不到合适的报告插件。请帮忙 问题答案: 您可以根据要执行/显示的自定义/功能多少来查看以下几种: https://wiki.jenkins-ci.org/display/JENKINS/Global+Build+Stats+Plug
flex-basis 我们使用flex-basis属性在分配空间之前定义flex-item的默认大小。 以下示例演示了flex-basis属性的用法。 在这里,我们创建了3个彩色盒子,并将它们的尺寸固定为150像素。 <!doctype html> <html lang = "en"> <style> .box{ font-size:15px;
本文向大家介绍灵活使用asp.net中的gridview控件,包括了灵活使用asp.net中的gridview控件的使用技巧和注意事项,需要的朋友参考一下 gridview是asp.net常用的显示数据控件,对于.net开发人员来说应该是非常的熟悉了。gridview自带有许多功能,包括分页,排序等等,但是作为一个.net开发人员来说熟练掌握利用存储过程分页或者第三方自定义分页十分重要,这不仅是项