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

 

目录

 

问题描述

解决方案

apktool下载


问题描述

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


Caused by: java.io.IOException: CreateProcess error=206, 文件名或扩展名太长。
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        ... 9 more

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

解决方案

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

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

2.反编译apk时控制apktool.yml里doNotCompress里的内容。

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

https://github.com/iBotPeaches/Apktool/issues/1272

答案已经有了,于是去官网下载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下载

点击下载我编译的apktool

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

 

你可能感兴趣的:(android,U8SDK,cocoscreator)