近期在GooglePlay发布版本时遇到一个问题,新版本合入了应用内付费的功能,但是升级到新版本的用户比以往少太多,不足20%。分析这个问题的原因,原来是由于新版本由于需要做应用内付费,就需要用到一个权限com.android.vending.BILLING,这个权限是新版本的新增权限。
GooglePlay有一个自动更新应用的功能,且该功能默认是开启的,因此大部分用户的应用更新都是通的GooglePlay的自动更新,但是如果新版本较旧版本而言有新增权限的话,GooglePlay就不会帮你默认更新,则完全需要用户手动更新升级了。
综上,版本发布前除了测试版本的新增功能之外,检查版本的权限也是很有必要的,如果有新增的权限就需要权衡,是针对该权限的功能重要,还是用户升级重要。如果新增权限至是为了一个用户完全无法感知,对产品完全没有正面影响的话,那么就可以考虑去掉该功能。
说了这么多,那么回到正题,版本发布前需要坚持版本的权限,并且与上一版本对比校验,确认是否有新增或者减少权限,是版本发布前很有必要执行的一个环节。就想需要确认版本号一样。那么怎么样去查看一个APK的权限信息呢?古老一点的办法就是手机上先安装老版本,在覆盖安装新版本,在手机上看提示。但是这个版本并不靠谱,因为有些权限是不会展示给用户的,就想应用内付费需要的权限com.android.vending.BILLING,我在升级安装的时候,是提示我没有新增权限的。因此想要查看一个是否有新增权限,还是得查看APK完整的权限信息。我在网上找了下办法,发现可以通过aapt命令达到我想要的目的。接下来我就简单讲讲aapt命令。
aapt即Android Asset Packaging Tool,我们可以在SDK的platform-tools目录下找到该工具。aapt可以查看、 创建、 更新ZIP格式的文档附件(zip, jar, apk)。 也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。接下来我就简单讲下aapt一些简单的应用。
aapt查看APK信息:
aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
badging Print the label and icon for the app declared in APK.
permissions Print the permissions from the APK.
resources Print the resource table from the APK.
configurations Print the configurations in the APK.
xmltree Print the compiled xmls in the given assets.
xmlstrings Print the strings of the given compiled xml assets.
1.1 查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息
aapt dump badging
部分效果图:
1.2 查看权限
aapt dump permissions
效果图:
1.3 查看资源列表
aapt dump resources
一般都会输出很多的信息,如要全部查看,请用下面这两句:
aapt dump resources > sodino.txt
sodino.txt
这样会把所有的信息通过重定向符">"输出到sodino.txt文件中,然后再打开该文件即可查看。
1.4 查看apk配置信息
aapt dump configurations
部分效果图:
1.5 查看指定apk的指定xml文件。
aapt dump xmltree res/***.xml
以树形结构输出的xml信息。
aapt dump xmlstrings res/***.xml
输出xml文件中所有的字符串信息。
以上介绍的只是aapt比较简单的查看应用命令,还有其他一些命令没有做介绍,后续再工作中用到后会继续讲解。