热更新,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文件。这两个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”
-- -- -- --
如转载,请注明作者 [email protected]
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,即可“试用”,避免直接装到手机的未知风险。