热更新,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. 文件操作符|-e|-M|-s|-A|_|-r -w $filename|stat|localtime|&|>>|<<

    TTY:终端是一种字符型设备,它有多种类型,通常使用tty 来简称各种类型的终端设备 #!/usr/bin/perl use strict; use warnings; print "exi ...

  2. liquibase使用教程

    在项目中引入liquibase过程: 1.父项目 pom.xml 中添加依赖 <dependencies> <dependency> <groupId>mysql& ...

  3. [Algo] 73. Combinations Of Coins

    Given a number of different denominations of coins (e.g., 1 cent, 5 cents, 10 cents, 25 cents), get ...

  4. 29)PHP,自动加载类

    (1)作用: 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. (2)什么叫做“需要一个类”?通常是这样的情况: 1,创建一个 ...

  5. Metasploit笔记

    生成exe后门 msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=PORT -f exe -o 1987.exe 生成PHP后门 m ...

  6. windows下使用apache相关资料汇总

    1.Apache httpd.conf配置详解 https://www.cnblogs.com/langren1992/p/5160912.html 2.windows下使用apache经验总结 ht ...

  7. mysql 子查询不支持limit

    mysql执行如下语句 : SELECT * FROM `xxx_base_info` where yn =1 and xxx_keeper_id in (SELECT id FROM `user`w ...

  8. 62)PHP,提示跳转

    由于就是一个普通的页面展示,提示的样式,可以轻松定制! 语法: Header()后的代码会执行,因此在处理好跳转相关操作后,脚本也应该被DIE掉! 案例中实现跳转 封装一个可以完成跳转的方法,需要时, ...

  9. 四剑客(find&grep)

    一.find 简介: find相关:条件匹配表达式.选项表达式.动作表达式.组合条件表达式 1.1.语法格式 find   path   -option   [   -print ]   [ -exe ...

  10. Java 的 ArrayList 的底层数据结构

    1. 数据结构--ArrayList源码摘要 ublic class ArrayList<E> extends AbstractList<E> implements List& ...