热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创)

RePlugin是Qihoo 360公司的开源框架,原本目的是用于热更新。但是,这个框架提供的功能远远超出了热更新的范围。

先介绍一下RePlugin   官方地址 https://github.com/Qihoo360/RePlugin

一、Android的ClassLoader(Google官方的MultiDex处理方式)

(1) PathClassLoader:仅加载apk中的主dex文件。PathClassLoader构造方法中向上传递时dex路径参数传了null;DexPathList在生成Element数组时判断dex路径参数,如为null就使用系统默认路径/data/dalvik-cache,所以只能加载apk中的主dex文件。

(2) DexClassloader:加载apk中的其他的dex文件;动态加载,通过反射获取到PathClassLoader中的DexPathList(这里有Element数组),最后将后加载进的dex和反射取到的Element数组合并后再重新设置。

这两个ClassLoader最大的区别就是DexClassLoader可以加载外置dex文件。

二、Replugin的ClassLoader:

(1) RePluginClassLoader:用来代替宿主工作。 位置:com.qihoo360.replugin.RePluginClassLoader

在构造方法中复制宿主ClassLoader中的内容,然后反射获取宿主ClassLoader中的方法并覆盖,最后重写loadClass方法。首先通过要加载的类名来查找对应的插件是否存在,如存在则取出插件的ClassLoader,并用来加载类;如不存在则使用宿主的原ClassLoader进行加载。

(2) PluginDexClassLoader:用来加载插件apk的类。 位置:com.qihoo360.replugin.PluginDexClassLoader。

三、Hook原理剖析

通过宿主Application -> 获取BaseContext -> 获取mPackageInfo(LoadedApk类型) -> 获取mClassLoader(要替换的PathClassLoader) -> 创建RePluginClassLoader

然后把RePluginClassLoader设置到 “mPackageInfo的mClassLoader” 和 “Thread的contextClassLoader”

-- -- -- --

如转载,请注明作者 alex9xu@hotmail.com

RePlugin 的实际应用及原理介绍:

一、 热更新  这也是Replugin框架的设计目的

1. 提交到应用市场的程序只是一个Replugin框架app,用于加载特定的插件(插件为apk文件,需要事先在框架里注册包名和md5才能被加载)。该框架包含基本的网络通讯功能,可以和指定服务器对比版本并下载文件。

2. 从指定服务器下载apk文件后,存放到框架app的私有目录内,替换发包的时候自带的apk文件。

3. 下次打开框架app,会发现程序已经变成了新的。

二、App双开,App隐藏

1. 在Replugin框架app内注册要双开的apk包名和md5,比如“微信”的包名和md5,然后在框架app上做个入口(比如:打开微信),就可以实现应用双开了,和系统原本存在的App互补影响。

2. 这种方式打开的App,实际在系统中是“不可见”的,只有通过框架app才能进入,完美实现“隐藏”目的。

三、试用app

同理,在Replugin框架app内注册要试用的apk包名及md5,即可“试用”,避免直接装到手机的未知风险。

热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创)的更多相关文章

  1. H5 App实现热更新,不需要重新安装app

    直接上代码吧,你竟然搜到了我的文章就应该知道了,为什么要热更新 //app热更新下载 //假定字符串的每节数都在5位以下 function toNum(a) { //也可以这样写 var c=a.sp ...

  2. 🙈 如何隐藏你的热更新 bundle 文件?

    如果你喜欢我写的文章,可以把我的公众号设为星标 ,这样每次有更新就可以及时推送给你啦. 前段时间我们公司的一个大佬从一些渠道得知了一些小道消息,某国民级 APP 因为 Apple App Store ...

  3. 优化单页面开发环境:webpack与react的运行时打包与热更新

    前面两篇文章介绍初步搭建单页面应用的开发环境: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-router实现单页面应用路由 这 ...

  4. React Native之code-push的热更新(ios android)

    React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...

  5. webpack热更新和常见错误处理

    时间:2016-11-03 10:50:54 地址:https://github.com/zhongxia245/blog/issues/45 webpack热更新 一.要求 局部刷新修改的地方 二. ...

  6. ionic1实现热更新以版本检测更新安装包的方法

    1.需要下载热更新插件:插件名称是cordova-hot-code-push 首先打开cli,执行命令 npm install -g cordova-hot-code-push-cli 此功能主要是为 ...

  7. Cordova - 实现热更新 !

    Cordova版本:8.0.0 更新APP平台:Android 操作系统:Windows Cordova的热更新,作用是把www内的变动部分更新到APP中,实现主程序不动,完成更新!!这个热更新功能, ...

  8. Python 软件热更新

    Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...

  9. uni-app 实现热更新

    前端打包 app 即把写好的静态资源文件套壳打包成 app ,而热更新即下载并替换 app 内部的静态资源文件,实现 app 的版本升级. 在uni-app 中,我们是如何实现热更新的呢?下面来看代码 ...

随机推荐

  1. winform显示word、ppt和pdf,用一个控件显示

    思路:都以pdf的格式展示,防止文件拷贝,所以要把word和ppt转换为pdf:展示用第三方组件O2S.Components.PDFView4NET.dll,破解版的下载链接:https://pan. ...

  2. POJ 3617 Best Cow Line 字典序最小

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...

  3. 100)PHP,文件上传总代码整理

    首先是我的目录关系: 然后我的html表单代码: <html> <head> <title>Form</title> <meta http-equ ...

  4. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  5. AD复制问题汇总

    1:文件复制服务NtFrs 13568报错的解决方法 解决方法: 建议不要按照日志的提示进行操作,正确的操作应该是 出现这个问题的原因,是由于在硬件的损坏,导致服务器未正确处理NTFS USN 日志. ...

  6. OpenCV 对两幅图像求和(求混合(blending))

    #include <cv.h> #include <highgui.h> #include <iostream> using namespace cv; int m ...

  7. Qt QString类及常用函数功能详解

    QString 是 Qt 编程中常用的类,除了用作数字量的输入输出之外,QString 还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能. QString 存储字符串釆用的是 Un ...

  8. CSA|EI

    信息检索 CSA是学科特色的包含相关学科的内容,其网址是https://search.proquest.com/ 可以使用命令行检索: 分类的限制检索: 寻找检索线索可使用百科全书 EI是工程领域最全 ...

  9. Docker的部署安装(CentOS)-by paymob

    环境准备 通过命令查看系统版本和内核版本等信息 [gmuser@--- ~]$ cat /etc/redhat-release CentOS Linux release (Core) [gmuser@ ...

  10. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...