问题描述
最近用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个小时都没头绪,最后把*的关掉,居然可以正常编译。