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

问题描述

最近用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值