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

热更新,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原理剖析

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

(2) 然后把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,即可“试用”,避免直接装到手机的未知风险。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值