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

APKUtil(java解析Android或IOS的工具包),第1张

一、 读取文件的信息

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

二、实例

pom.xml



<dependency>
	<groupId>net.dongliugroupId>
	<artifactId>apk-parserartifactId>
	<version>2.6.10version>
dependency>


<dependency>
    <groupId>com.googlecode.plistgroupId>
    <artifactId>dd-plistartifactId>
    <version>1.23version>
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;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/994452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存