APK 上架市场前修改几次versionCode
和versionName
是常有的事情,大部分都是沟通上的问题,因为一个包要经过 开发->测试->己方运营->平台方运营->平台方测试(可能有),这是一条崎岖漫长的路,过程中可能有人连这两个版号是啥有啥用都不是很清楚,无奈。
既然避免不了就只能想办法解决了:
那么能不能直接修改 APK 中的 AndroidManifest.xml 呢?因为aapt
和AXMLPrinter2.jar
都可以直接解析二进制的 AndroidManifest.xml,所以直接修改应该是可行的,只要知道文件的结构。
说到这里不能不从怀里掏出这张MindMac 大神从AXMLPrinter2.jar
源码中分析出来的结构图,膜拜 Orz
四年前拿者这张宝图,再到同性交友网 GitHub 上找到了一个 java 的项目,并在上面做了二次开发解决了修改版本的问题,原以为一切就应该到此结束了。
但是、
但是、、
但是、、、
Bug 会迟到但是从不缺席:
在把versionName
从1.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
超香的。