APK 上架市场前修改几次versionCodeversionName是常有的事情,大部分都是沟通上的问题,因为一个包要经过 开发->测试->己方运营->平台方运营->平台方测试(可能有),这是一条崎岖漫长的路,过程中可能有人连这两个版号是啥有啥用都不是很清楚,无奈。

既然避免不了就只能想办法解决了:

那么能不能直接修改 APK 中的 AndroidManifest.xml 呢?因为aaptAXMLPrinter2.jar都可以直接解析二进制的 AndroidManifest.xml,所以直接修改应该是可行的,只要知道文件的结构。

说到这里不能不从怀里掏出这张MindMac 大神AXMLPrinter2.jar源码中分析出来的结构图,膜拜 Orz

四年前拿者这张宝图,再到同性交友网 GitHub 上找到了一个 java 的项目,并在上面做了二次开发解决了修改版本的问题,原以为一切就应该到此结束了。
但是、
但是、、
但是、、、
Bug 会迟到但是从不缺席:
在把versionName1.9修改成1.10后 APK 安装失败,通过定位问题后发现是 AndroidManifest.xml 解析错误,尝试着想在原来的代码上修复这个 Bug,结果失败了。果然代码这个东西少了注释这个红娘,很快就和你行同陌路了。

不过好在宝图还在,正好最近在学习 Python,而且构建那块也是用 Python 处理,一切都在告诉我『用 Python 重撸一遍吧』
好了废话了那么多直接上链接吧
https://github.com/CodyGit/ManifestEditor

Bug 最终浮出了水面:
在添加字符串时都是 2 个字节的添加,但是每个 Chunk 必须是 4 个字节的倍数,当把1.9改成1.10添加了 1 个字符对应就是 2 个字节,需要在StringChunk的 末尾补上 2 个字节的0x00

等会儿,Android 需要修改 iOS 就不需要了?推荐你使用/usr/libexec/PlistBuddy超香的。


↙↙↙阅读原文可查看相关链接,并与作者交流