项目里需要用java代码解析出apk包的版本号、版本名称等信息,一开始用的AXmlResourceParser工具解析的,结果发现解析出错
java.lang.ArrayIndexOutOfBoundsException: 128
at android.content.res.StringBlock.getShort(StringBlock.java:231)
at android.content.res.StringBlock.getString(StringBlock.java:91)
at android.content.res.AXmlResourceParser.getName(AXmlResourceParser.java:140)
at test.AXMLPrinter.main(AXMLPrinter.java:56)
网上查了一些方案 都说是AXMLPrinter2.jar需要修改,改了之后还是不行。最终发现了一个纯Java实现的Apk解析Lib,也是现存的功能最强的Apk Parser。在不需要aapt等工具的前提下,可以:
1. 查看Apk 的元信息,如标题、图标、SDK版本、权限、支持的语言等
2. 解析Apk 中任意的Binary Xml 文件,翻译成可读的Xml 文本
3. 查看Apk Dex 文件中包含的Class 信息
4. 验证Apk 签名,查看签名的信息
使用方法:
添加依赖
<dependency>
<groupId>net.dongliu</groupId>
<artifactId>apk-parser</artifactId>
<version>2.5.3</version>
</dependency>
代码里调用
public static void main(String[] args) {
try {
ApkFile apkFile = new ApkFile(new File("C:\\Users\\Administrator\\Desktop\\app-release.apk"));
ApkMeta apkMeta = apkFile.getApkMeta();
System.out.println(apkMeta.getLabel());
System.out.println(apkMeta.getPackageName());
System.out.println(apkMeta.getVersionCode());
System.out.println(apkMeta.getVersionName());
/*for (UseFeature feature : apkMeta.getUsesFeatures()) {
System.out.println(feature.getName());
}*/
} catch (Exception e) {
e.printStackTrace();
}
}
效果
唐宋钢铁
tenx_yanglin.tenx_steel
1
1.0
app-release.apk
附上apk-parser的GitHub地址(https://github.com/hsiafan/apk-parser)