热更新,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. [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)

    设第i个人在t时刻生/死为(x,0/1,t),然后显然能够连上(x,0,t)->(x,0,t-1),(x,1,t)->(x,1,t+1),然后对于每个限制,用朴素的2-SAT连边即可. 但 ...

  2. Flink(二) —— 部署与任务提交

    一.下载&启动 官网上下载安装包,执行下列命令即启动完成. ./bin/start-cluster.sh 效果图 Flink部署模式 Standalone模式 Yarn模式 k8s部署 二.配 ...

  3. python_检测一些特定的服务端口有没有被占用

    一个python端口占用监测的程序,该程序可以监测指定IP的端口是否被占用. #!/usr/bin/env python# -*- coding:utf-8 -*- import socket, ti ...

  4. RAM-Based Shift Register (ALTSHIFT_TAPS) IP Core-实现3X3像素阵列存储

    最近想要实现CNN的FPGA加速处理,首先明确在CNN计算的过程中,因为卷积运算是最耗时间的,因此只要将卷积运算在FPGA上并行实现,即可完成部分运算的加速 那么对于卷积的FPGA实现首先要考虑的是卷 ...

  5. ionic3 设置状态栏背景颜色

    this.statusBar.styleDefault(); this.statusBar.overlaysWebView(true); this.statusBar.backgroundColorB ...

  6. Kali-tools

    title date tags layout Ubuntu Update Kali-Tools 2018-09-01 Linux post 创建shell文件 vim update-kali-sour ...

  7. php mb_substr()函数的详细解释!

    PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法 ...

  8. K3CLOUD呼吸时间设置

  9. JavaScript创建函数的方式

    在JavaScript中,创建函数是比较常见的操作,但是JavaScript中怎么创建函数呢,有几种方式可以创建函数呢?在JavaScript一般有三种方式创建对象1.函数声明方式格式:functio ...

  10. Tomcat源码解析-启动过程分析之主干流程

    Tomcat启动入口就在脚本startup.sh中,具体脚本可以看tomcat的源码,这个启动脚本主要用来判断环境,找到catalina.sh脚本路径,将启动参数传递给catalina.sh执行.ca ...