今天服务器端同事报了个bug,在解析一个游戏apk包时,无法得到versioncode, 我自己用aapt dump badging
命令试了一下,确实是会报一个ERROR getting 'android:versionCode' attribute: attribute is not an integer value
错误。
用反编译后也无法得到versionCode。太阳底下没有新鲜事,果断先google一发,stackoverflow上面果然有人问过这个问题,原来这个问题的原因是aapt的一个bug,当app的androidmanifest文件的versionCode使用的引用值(android:versionCode="@integer/versioncode"
)时,就会解析错误。
网友的回答都是修改versionCode的赋值方式,通过直接复制避免这个问题,可如果包已经打出来了怎么解决呢?
我在查看了aapt
命令的另外几个参数后终于有了解决方法,步骤如下:
- 使用命令
aapt dump xmltree ***.apk AndroidManifest.xml
先解析AndroidManifest文件,得到versionCode的引用值地址@0x7f0d009
- 使用命令
aapt dump resources ***.apk
得到所有resourcees信息,搜索上面的引用地址@0x7f0d009
,得到
,这个d就是真实的versionCode值了。