当前位置: 首页 > 工具软件 > apkutil > 使用案例 >

APKUtil(java解析Android或IOS的工具包)

冷夜洛
2023-12-01

一、 读取文件的信息

和众多的项目一样,在苹果和安卓的项目中,也有很多的版本信息,那么这些都存储在哪里了呢?在每个我们打好的包里面,其实都有一个专门标注版本信息和版权,描述的文件,如果我们用winrar或者其他解压缩软件把安装包解压缩之后,我们可以得到里面的很多信息,然后一般我们都会在软件的最外层发现一个.xml的文件来看到我们的版本信息(一般都有加密)。
所以我们获得版本信息的来源就是要从安装包中提取xml的文件,然后通过解析xml文件中的特殊节点来获得我们所需要的信息。具体思路就是 解包(类似zip)->读取文件->把信息放入构造的实体中->从实体中获得数据
因为各种版本的安卓应用所用的AndroidStudio和SDK都是不同的,所以我们在解析的时候也会有稍许的不同,好在有兼容的存在,还有对于各种版本的识别网上都有处理。

二、实例

pom.xml

<!-- Android -->
<!-- https://mvnrepository.com/artifact/net.dongliu/apk-parser -->
<dependency>
	<groupId>net.dongliu</groupId>
	<artifactId>apk-parser</artifactId>
	<version>2.6.10</version>
</dependency>
<!-- IOS -->
<!-- https://mvnrepository.com/artifact/com.googlecode.plist/dd-plist -->
<dependency>
    <groupId>com.googlecode.plist</groupId>
    <artifactId>dd-plist</artifactId>
    <version>1.23</version>
</dependency>

APKUtil.java

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import net.dongliu.apk.parser.ApkFile;
import net.dongliu.apk.parser.bean.ApkMeta;
import net.dongliu.apk.parser.bean.UseFeature;

public class APKUtil {
    public static void main(String[] arg){
        String filePath = "D:\\111.apk";

        try (ApkFile apkFile = new ApkFile(new File(filePath))) {
            ApkMeta apkMeta = apkFile.getApkMeta();
            System.out.println(apkMeta.getName());
            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 (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取APK信息-HOTN-2021年12月20日10:15:52
     * @param apkUrl
     * @return
     */
    public static Map<String,Object> readApk(String apkUrl){
        Map<String,Object> resMap=new HashMap<String,Object>();
        try (ApkFile apkFile = new ApkFile(new File(apkUrl))) {
            ApkMeta apkMeta = apkFile.getApkMeta();
            resMap.put("versionCode", apkMeta.getVersionCode());
            resMap.put("versionName", apkMeta.getVersionName());
            for (UseFeature feature : apkMeta.getUsesFeatures()) {
                System.out.println(feature.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return resMap;
    }
}
 类似资料: