Meituan-Dianping / Robust

Robust is an Android HotFix solution with high compatibility and high stability. Robust can fix bugs immediately without a reboot.
Apache License 2.0
4.4k stars 806 forks source link

以下修改可兼容R8 #383

Closed weiyixiong closed 4 years ago

weiyixiong commented 4 years ago

因为R8生成的mapping文件的格式与Proguard不一致导致Robust在读取mapping文件时解析错了方法名。 对ReadMapping.java做出如下修改就可兼容R8了。因为代码较短就不提merge了。希望能帮助到其它人。作者看到可以更新一下代码然后关了这个issue就好了

 public String getMethodSigureWithReturnTypeInMapping(String returnTypeWithNumber, String methodSignure) {
        //初步观察mapping文件,使用":"来截取返回值,还可以通过寻找第一个字符,
        if (methodSignure.contains(":")) {
            //兼容R8
            return getMethodSignureWithReturnType(returnTypeWithNumber.substring(returnTypeWithNumber.lastIndexOf(":") + 1), methodSignure.substring(0, methodSignure.indexOf(":")));
        }
        return getMethodSignureWithReturnType(returnTypeWithNumber.substring(returnTypeWithNumber.lastIndexOf(":") + 1), methodSignure);
    }
ppxpp commented 4 years ago

实测可用,否则R8混淆得到的mappings文件,在生成patch时会报错

hedex commented 4 years ago

感谢反馈

hedex commented 4 years ago

代码已同步,非常感谢