说到解析APK文件获取Android应用信息,大家首先想到的就是aapt(Android Asset Packaging Tool)工具。没错!小编也是基于aapt工具,结合java代码实现APK文件的解析。

aapt工具依赖下列包,需要先在系统中安装,以CentOS 7.0操作系统为例,我们使用yum命令安装这些依赖包,命令如下:

yum install glibc.i686(如果存在x86_64的旧版本则需要先更新x86_64的版本后或选择相同版本的rpm包才能使用yum安装)

yum install zlib.i686

yum install libstdc++.i686

依赖包安装好后,我们可以使用命令:

./aapt_linux_64 d badging /tmp/9a6038d8-150c-4942-af53-747757cd2d69.apk

此处参数d表示dump,及命令也可以写成:

./aapt_linux_64 dump badging /tmp/9a6038d8-150c-4942-af53-747757cd2d69.apk

参数badging表示输出详细信息,英文原文为:Print the label and icon for the app declared in APK(即打出输出APK文件中声明的各种标签,按钮等信息),另外我们还可以查看APK包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息,如下图所示执行结果:

android uri 解析 安卓解析app_绝对路径


在Java中我们通过ProcessBuilder.start() 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息,此处我要需要其运行aapt命令,所以因为command(AppConstants.AAPT_APK_PARSER_TOOL, “d”, “badging”, apkPath),参数分别为aapt工具在本机中的绝对路径,aapt参数d,aapt命令参数badging,APK文件的绝对路径;

android uri 解析 安卓解析app_APK_02


通过process.getInputStream()可以返回aapt命令执行后返回的应用信息(aapt执行结果图示可以查看返回信息格式),通过对返回信息格式分析可知格式为key:value形式并通过换行符分隔每个属性,所以我们就可以一行行数据读取并解析,

android uri 解析 安卓解析app_绝对路径_03


android uri 解析 安卓解析app_绝对路径_04

如果一行中字符串是以“package”开头,则可以解析出packageName,versionCode,versionName

android uri 解析 安卓解析app_android uri 解析_05