一.官方地址
https://github.com/Meituan-Dianping/Robust
二.我的环境
Gradle7.4
Java11
三.接入过程
当我尝试用目前比较高的工具版本,按照ReadMe的提示接入美团Robust的时候发现
3.1 jcenter()库已经不能用
但是可以使用使用阿里maven仓库地址
maven { url 'maven.aliyun.com/repository/…' }
3.2.编译项目,提示没有找到robust.xml
An exception occurred applying plugin request [id: 'robust']
> Failed to apply plugin 'robust'.
> /Users/xtt/Documents/AndroidProject/RobustTestDemo/app/robust.xml (No such file or directory)
3.3 当你开开心心的通过命令打release包编译时你会遇到
Caused by: java.lang.RuntimeException: You have duplicate classes with the same name : META-INF.versions.9.module-info please remove duplicate classes
通过查看issue发现有人遇到了相同的问题,并给出了解决办法
3.4 修改后再次尝试
Cannot cast object 'task ':app:packageRelease' property 'resourceFiles'' with class 'org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar' to class 'java.io.File'
但是又出现了3.3的问题,貌似无解
3.5 联系修复3.3问题的大佬,虚心请教解决办法
大佬直接把最新的解决方法push到了远端仓库,大佬是网易的,如果网易在用这个方案,那大概率应该没什么问题.
3.6 开开心心的再次尝试
打patch包的时候又遇到了这个问题
Cannot cast object 'task ':app:packageRelease' property 'resourceFiles'' with class 'org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar' to class 'java.io.File'
但是它生成了patch包,先不管看看patch包能不能用
3.7 调用loadPatch方法
发现patch包并没有拷贝到cache目录,提示权限异常,原因是我使用Android11版本的模拟器比较高,好烦.
降到Andorid10,并在清单文件中配置android:requestLegacyExternalStorage="true"
3.8 尝试成功
终于在一系列尝试之后,终于成功加载了修复包,将代码修复
四.热修复原理
可以通过反编译验证编译后插入的代码逻辑.