derocoodemo @Deprecated (see https://github.com/Tencent/tinker)
a demo depend rocoofix
#基于https://github.com/dodola/RocooFix 静态修复部分的demo
###android gradle version!
com.android.tools.build:gradle:2.1.2
###android 6.0说明:
测试发现有2种情况补丁不生效
1:没有开启scanf
2:程序无法读取sdcard上的补丁,即使后面手动开启权限,也存在file.canread==false[原因未知]
demo修改:
1添加scanf
2界面显示应用的补丁目录(上面情况2下,走data/data)
###demo 涉及:
1抽象patch补丁包的路径(默认放在data/data/下,或者放在sdcard,可以自定义)
2抽象patch下载(简单实现了个默认的,可以根据需要修改成自己的下载逻辑)
##问题汇总(表格会遮挡,请拖动)
###编译不通过请加入--stacktrace 查看具体错误信息
问题 | 原因 | 建议 |
---|---|---|
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation | 插桩没有成功 | app反编译看看是否插桩成功,(之前用dex2jar出现看不到插庄,但实际已经插庄)这里推荐工具jadx-gui(从群友幽幽那里得知的工具,在此鸣谢)(derocoodemo/app/doc/QQ20160708-0.png是插庄成功的截图) |
patch.jar生成不了 | 估计流程不对 | 参考(derocoodemo/app/doc/77d89a39e481ed8c0cd5f4c8a2cfbe86f5bdf8b9_1.jpg) |
hash.txt为空 | 没有开启混淆 | 开启混淆 |
scanref打开后报错 找不到属性 | 插件版本太低 | demo已经应用最新插件 |
mininum sdk小于15 | sdk版本不一致 | use overrideLibrary |
Error:Execution failed for task app rocooJarBeforeDexDebug | gradle 版本太低 | com.android.tools.build:gradle:2.1.2 |
>com/android/dx/cf/direct/AttributeFactory | gradle 版本太低 | com.android.tools.build:gradle:2.1.2 |
rocoo稳定么 | rocoo是基于扣扣空间的方案,稳不稳定看下面微信对qq空间方案的评价 | |
Unsupported major.minor version 52.0 | 高版本的java project使用了低版本的来运行 | 使用高版本Jdk编译 .. 1.8 |
###注意
1任何在补丁加载前的类(比如Application及其子类)都不能插入Hack.class
2最新插件必须开混淆
3includePackge 包名是 /分割 不是 .分割
4excludeClass a.class,b.class 不带包名
5rocoo(lib库)是1.1,rocoofix(插件)是1.2.6 或者自己编译源代码
###mark:
debug阶段建议设置成sdcard的,方便替换测试
需要增量补丁的可以使用bsdiff实现
https://github.com/shoyu666/bsdiffAndroidDemoWithSo
###热修复相关文章:
1 rocoo静态原理基于扣扣空间文章
https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=1&srcid=1106Imu9ZgwybID13e7y2nEi#wechat_redirect