欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

apktool 回编译时报文件名或扩展名太长的问题

程序员文章站 2022-05-12 17:09:15
...

问题描述

最近用u8sdk分游戏包的时候,出现CreateProcess error=206, 文件名或 扩展名太长错误:

Caused by: java.io.IOException: CreateProcess error=206, 文件名或扩展名太长。
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
复制代码

这其实是apktool.yml里面的doNotCompress节点下面的内容太多,apktool回编译时参数过长导致(windows 命令行支持的字符串长度有限制,不超过8191个字符)。其实之前就已经碰到过这种问题,当时偷懒,直接把apktool.yml里doNotCompress节点下的内容删了然后手动回编译。虽然解决了问题,但是每次都需要手动操作,太麻烦。

解决方案

要彻底解决这个问题,有两种方案:

1.写脚本在回编译之前删除apktool.yml里doNotCompress中多余的内容。 2.反编译apk时控制apktool.yml里doNotCompress里的内容。

方案1因为需要改u8sdk的脚本,直接放弃了。于是去apktool官网找答案,其实已经有人遇到过这种问题: github.com/iBotPeaches…

答案已经有了,于是去官网下载apktool2.3.2版本源码,解压后用文本编辑以打开lib\src\main\java\brut\androlib\Androlib.java,搜索NO_COMPRESS_PATTERN,在最后添加上ver,然后保存。

修改前:

private final static Pattern NO_COMPRESS_PATTERN = Pattern.compile("\\.(" +
            "jpg|jpeg|png|gif|wav|mp2|mp3|ogg|aac|mpg|mpeg|mid|midi|smf|jet|rtttl|imy|xmf|mp4|" +
            "m4a|m4v|3gp|3gpp|3g2|3gpp2|amr|awb|wma|wmv|webm|mkv)$");
复制代码

修改后:

private final static Pattern NO_COMPRESS_PATTERN = Pattern.compile("\\.(" +
            "jpg|jpeg|png|gif|wav|mp2|mp3|ogg|aac|mpg|mpeg|mid|midi|smf|jet|rtttl|imy|xmf|mp4|" +
            "m4a|m4v|3gp|3gpp|3g2|3gpp2|amr|awb|wma|wmv|webm|mkv|ver)$");
复制代码

回到源码根目录,点击gradlew.bat,等待编译,编译完成后会在brut.apktool\apktool-cli\build\libs目录下生成apktool-cli-all.jar。用apktool-cli-all.jar将u8sdk的tool\win下的apktool.jar替换(名字与工具中原来的apktool.jar保持一致,我自己的是apktool2.jar)

然后再用u8sdk分渠道包,完美通过。

小插曲:在编译apktool过程中,一直报各种connection refused,查了3个小时都没头绪,最后把*的关掉,居然可以正常编译。

apktool下载

点击下载我编译的apktool