当在APK文件中调用目录时,ZipEntry返回null

时间:2019-05-27 21:35:36

标签: java android apk zipfile ipa

我正在尝试建立一个函数,其中将apk文件放置在指定目录中,存储在array []中,然后经历for-each循环,创建ZipFile实例,然后创建ZipEntry来调用lib目录,并读取其中的文件名,以帮助确定哪些apk与当前连接到PC的android设备兼容。这是我到目前为止的代码:

public File[] apkFileList;
private HashMap<String, File> apkInstallOptions = new HashMap<String, File>();

public void createAPKList() throws ZipException, IOException {
    apkFileList =  new File(".....(many dirs later)/APKDir/APKFiles").listFiles();
    System.out.println(apkFileList[apkFileList.length-1].getName());
    apkInstallOptions = storeAndSortFiles(apkFileList, apkInstallOptions);
}

private HashMap<String, File> storeAndSortFiles(File[] fileList, HashMap<String, File> storageList) throws ZipException, IOException{
    ZipFile apkDetails;
    for(File apk : fileList) {
        apkDetails = new ZipFile(apk);
        ZipEntry libFiles = apkDetails.getEntry("lib/");
        libFiles.isDirectory();
        InputStream inputStream = apkDetails.getInputStream(libFiles);
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        String line = null;
        while((line = br.readLine()) != null) {
            System.out.println(line);

        }

    }
    return storageList;
}

当我运行代码以测试到路径的映射是否看起来不错时,我会获得apk的正确名称,但是当我尝试为lib目录调用ZipEntry时,它将返回Null。我不确定为了忘记其中的内容而忘记了什么,也没有考虑添加什么。我已经看到了提取Zip / apk文件然后读取的解决方案,但是我只想读取lib目录中的内容。那可能吗?

在APK文件中看到的一个lib文件确实存在的屏幕截图(使用7-Zip查找内部): enter image description here

1 个答案:

答案 0 :(得分:1)

目录不存在zip格式。它们在桌面工具中被人为显示,但是zip库仅显示存在的实际文件,不包括目录。

因此,APK中存在的文件例如:

lib/arm64-v8a/libhello.so
lib/armeabi-v7a/libhello.so

但是liblib/armeabi-v7a将没有条目。

因此,您可以通过调用以下命令测试ZipEntry是否在“ lib”目录下:

zipEntry.getName().startsWith("lib/");