安装MagiskManager就可以了。
用官方工具安装MagiskManager,版本不低于V17.0。在MagiskManager里,模块里搜索Riku-core,然后安装就可以了。
Xposed框架(XposedFramework)是一套开源的、在Android高权限模式下运行的框架服务,可以在不修改APK文件的情况下影响程序运行(修改系统)的框架服务,基于它可以 *** 出许多功能强大的模块,且在功能不冲突的情况下同时运作。当前,PerAPPSetting(为每个应用设置单独的dpi或修改权限)、XPrivacy(防止隐私泄露)、对原生Launcher替换图标等应用或功能均基于此框架。
1、自备xposed.apk,安装完一定要打开一次,查看对应版本,然后进入xp数据包开源网站,找到xp框架对应的手机版本xp数据压缩包。
2、进入文件管理器找到Androd文件,依次进入date/de.robv.android.xposed.installer/cache/。
3、进到eache文件夹里之后,先创建一个downloads文件夹,进入里面再创建一个framework文件夹。
4、将开始说的下载好的xposed数据压缩包导入到三中建的最后一个文件夹framework里即可。
安装蜜蜂加速器。之一步,把MT管理器和Fdex2还有蜜蜂,统统添加到XP框架。然后打开Fdex2选择蜜蜂,选择以后在框架内打开蜜蜂,等待蜜蜂打开即可脱壳。第二步,在框架内打开MT管理器导出脱壳之后的dex,然后打开NP管理器选择整体修复进行dex修复。第三步,打开NP管理器点击安装包选择功能,然后点击超强去除签名校验2,选择精简包。
p
前面一篇Tinker相关的文章已经介绍了Tinker热修复框架的使用与整个的修复流程,那么这一篇就要开启Tinker的源码解析之路了。
首先简单说一下Tinker的原理,Tinker其实也是类似multidex的dex方式,将目标dex插入到数组最前面,主要是通过对比原dex文件(存在bug)与现dex文件(bug已修复)生成差异包,生成的差异包作为补丁包下发给客户端,客户端做一系列校验之后,将下发的差异包与本应用的dex文件合并成成全量的dex文件,并进行opt优化,当再次启动APP时候则加载优化过的全量dex文件,将dex文件插入到DexPathList 中 dexElements的前面。
所以Tinker其实是两个流程,一个是加载补丁包,另外一个是加载dex文件,两个的加载流程相对较长,这里分开说明,这一篇呢,主要介绍加载补丁包的流程。
p
加载补丁包的 *** 如下
往下看发现调用了TinkerInstaller的onReceiveUpgradePatch ***
TinkerInstaller.java
这里调用了PatchListener的onPatchReceived ***
而PatchListener是一个接口,他的具体实现为SamplePatchListener *** ,onPatchReceived在SamplePatchListener的父类DefaultPatchListener有实现,我们看下DefaultPatchListener中的onPatchReceived ***
如下
DefaultPatchListener.java
首先这个检测了一下这个插件是否可用,通过SamplePatchListener的patchCheck *** 来检测
SamplePatchListener.java
这里对插件是否可用进行了判断,就不进行详细分析了
当插件可用时候returnCode为ERROR_PATCH_OK,当不可用则会log出来失败的errorcode
成功则调用
来启动TinkerPatchService这个IntentService,并且把插件的路径给传递到IntentService
TinkerPatchService通过onHandleIntent来接收传递过来的数据
TinkerPatchService.java
这里首先调用了PatchReporter的onPatchServiceStart *** ,而PatchReporter的实现为SamplePatchReporter
SamplePatchReporter.java
这里主要看UpgradePatchRetry的onPatchServiceStart ***
UpgradePatchRetry.java
这里主要也做了一些验证,并且把文件复制一份到/data/data/tinker.sample.android/tinker_temp/路径下,然后把相关信息写入到配置文件中
在回到TinkerPatchService的onHandleIntent ***
主要看
这个 *** 的实现在UpgradePatch中
UpgradePatch.java
这里首先初始化相关数据与相关验证,再将补丁文件拷贝到目标目录中
路径为/data/data/tinker.sample.android/tinker/patch-xxxxxx/patch-xxxxxx.apk
接下来就是调用DexDiffPatchInternal,BsDiffPatchInternal,ResDiffPatchInternal这些类的 *** 进行dexDiff差分的计算相关
至于相关差分的计算,由于比较复杂,我暂时还没有深入去看,暂时埋个坑在这里,等后面找时间去填上这个坑
在回到TinkerPatchService的onHandleIntent ***
后面调用了PatchReporter的onPatchResult,这个 *** 主要删除了上面拷贝在/data/data/tinker.sample.android/tinker_temp/的文件
接下来启动了AbstractResultService,并把插件的路径传递过去了
AbstractResultService的实现在SampleResultService类里面,SampleResultService的onPatchResult删除了原始的插件文件。
到这里插件加载分析就基本结束了
p
插件加载分析结束了,但是却没有去分析dexDiff差分的计算,而这个dexDiff差分计算则是区分的Tinker与其他相同方案的热修复库,dexDiff是基于 Dex 的文件结构来下手,将产生变化的结构提取出来,产生的补丁非常小,而且在 diff 的过程中也处理了一些会造成补丁包很大的场景,所以等后面有时间将这一块补上,下一篇文章则是对dex文件加载进行源码分析了,peace~~~
需要先ROOT
步骤:
1:打开手机上开发选项中的USB调试功能,
(有的手机需要多次点击版本信息,才可以出现开发中的USB调试),
2:使用原装的数据线将手机与电脑进行连接,
3:打开腾讯手机管家PC版本,找到“应用宝”功能,会迅速的识别你的手机机型,
并且自动的安装相应的手机驱动,连接成功。
4:使用备份资料将手机中的重要信息或文件进行备份,
防止在ROOT的过程中发生丢失的现象。
5:进入“工具箱”点击“一键ROOT功能”,等待3~5分钟,
就可以出现提示ROOT成功了,
6:成功后,就可以随意的使用文件管理功能对手机内的所有文件进行删除或者移动。