求:开发中经常有需求获取apk文件的版本号,和版本名称,比如确定一下上传到应用市场的apk是不是最新的apk,检查更新的时候也要确保后台的apk文件为新的apk。

行不通的方法:
1.直接解压apk,获得AndroidManifest.xml文件。(apk也为特殊的压缩文件),但是解压的结果为乱码,因为在生成apk的过程中对apk做了加密,编码操作。
解压效果如下:

完全看不懂呀

2.既然直接解压行不通,那用apktool工具反编译总可以了吧:cmd 执行以下命名:apktool d -s xxxxx.apk
效果如下:

可以看出,虽然反编译出来的文件,和我们AndroidManifest.xml源文件相差无几,但是为啥没有我们的VersionCode  VersionName 属性,反而读了2个

platformBuildVersionCode="21" platformBuildVersionName="5.0.1-1624448"属性了,那这2个属性是不是我们原AndroidManifest.xml是一样的呢,当然不是,

我这里原AndroidManifest.xml文件中的versionCode的值是2,而这里成了21.所以,这种方法也行不通

解决办法:
aapt工具
aapt dump badging xxxxx.apk
效果如下;

怎么样,packageName  versionCode   versionName  permission信息都有