Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.11k stars 3.33k forks source link

生成补丁异常java.util.regex.PatternSyntaxException #1525

Open android-huolailai opened 3 years ago

android-huolailai commented 3 years ago

Issue/提问须知

在提交issue之前,我们应该先查询是否已经有相关的issue以及常见问题。提交issue时,我们需要写明issue的原因,以及编译或运行过程的日志(加载进程以及Patch进程)。issue需要以下面的格式:

异常类型:编译异常

手机型号:

手机系统版本:

tinker版本:如:1.9.14.10

gradle版本:如:5.4.1

是否使用热更新SDK: 无

系统:如:Mac

堆栈/日志:
Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
        at com.tencent.tinker.build.decoder.ApkDecoder$ApkFilesVisitor.getAbiFromPath(ApkDecoder.java:225)
        at com.tencent.tinker.build.decoder.ApkDecoder$ApkFilesVisitor.visitFile(ApkDecoder.java:196)
        at com.tencent.tinker.build.decoder.ApkDecoder$ApkFilesVisitor.visitFile(ApkDecoder.java:144)
        at com.tencent.tinker.build.decoder.ApkDecoder.patch(ApkDecoder.java:116)
        at com.tencent.tinker.build.patch.Runner.tinkerPatch(Runner.java:69)

image

希望各位大佬帮忙解决下,生成补丁包异常

gt198318 commented 3 years ago

@android-huolailai 我也遇到这个问题,我是windows系统, 是检测有没有存在so库的时候, path.replaceAll(File.separator,"/"); 抛异常了: getAbiFromPath: E:\work_wj\work\WebShell_OTT\VisualClient\app\build\tmp\tinkerPatch\app-phone_client_dualh-release\lib\armeabi-v7a\libxxz.so separator: \

我把代码改成下边的就可以生成补丁了: private String getAbiFromPath(String path) { Logger.d("getAbiFromPath: " + path + " separator: " + File.separator); //if(!path.contains("/")) { // path = path.replaceAll(File.separator, "/"); //} String libTag = File.separator + "lib" + File.separator; final int prefixPos = path.indexOf(libTag); if (prefixPos < 0) { return null; } final int suffixPos = path.indexOf(File.separator, prefixPos + libTag.length()); if (suffixPos < 0) { return null; } return path.substring(prefixPos + libTag.length(), suffixPos); }

zhangdepeng125 commented 3 years ago

@android-huolailai 我也遇到这个问题,我是windows系统, 是检测有没有存在so库的时候, path.replaceAll(File.separator,"/"); 抛异常了: getAbiFromPath: E:\work_wj\work\WebShell_OTT\VisualClient\app\build\tmp\tinkerPatch\app-phone_client_dualh-release\lib\armeabi-v7a\libxxz.so separator: \

我把代码改成下边的就可以生成补丁了: private String getAbiFromPath(String path) { Logger.d("getAbiFromPath: " + path + " separator: " + File.separator); //if(!path.contains("/")) { // path = path.replaceAll(File.separator, "/"); //} String libTag = File.separator + "lib" + File.separator; final int prefixPos = path.indexOf(libTag); if (prefixPos < 0) { return null; } final int suffixPos = path.indexOf(File.separator, prefixPos + libTag.length()); if (suffixPos < 0) { return null; } return path.substring(prefixPos + libTag.length(), suffixPos); }

请问你是把源码下载下载 直接在项目里依赖的源码吗。

zhangdepeng125 commented 3 years ago

你好,请问你的这个问题解决了吗

gt198318 commented 3 years ago

@zhangdepeng125 最新版本已经改好了

zhangdepeng125 commented 3 years ago

@zhangdepeng125 最新版本已经改好了

你用的哪个版本已经改好了? 我用的最新版本1.9.14.14 还是有这个问题呢

AlexXue1986 commented 3 years ago

@zhangdepeng125 最新版本已经改好了

你用的哪个版本已经改好了? 我用的最新版本1.9.14.14 还是有这个问题呢 我看github上最新的代码已经改好了,但是maven仓库里最新发布的版本还是老的,所以你可以拉最新的代码自己编一个

zhangdepeng125 commented 3 years ago

@zhangdepeng125 最新版本已经改好了

你用的哪个版本已经改好了? 我用的最新版本1.9.14.14 还是有这个问题呢 我看github上最新的代码已经改好了,但是maven仓库里最新发布的版本还是老的,所以你可以拉最新的代码自己编一个

明白了。我就是这么搞的,我以为他们的发行版本已经好了呢,感谢解答