ZipEntry returns null 在 APK 文件中调用目录时
ZipEntry returns null When Calling for a Directory Inside an APK File
我正在尝试设置一个函数,其中 apk 文件被放置在一个指定的目录中,存储在一个数组中[],然后通过一个 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 时,它 returns 空。我不确定我忘记了什么以及我没有考虑添加什么来阅读里面的内容。我已经看到 Zip/apk 文件被提取然后读取的解决方案,但我只想读取 lib 目录中的内容。那可能吗?
在 APK 文件中看到的内容的屏幕截图确实存在一个 lib 文件(使用 7-Zip 查看内部):
zip 格式的目录不存在。它们在桌面工具中人为显示,但 zip 库仅显示存在的实际文件,不包括目录。
APK 中存在的文件例如是:
lib/arm64-v8a/libhello.so
lib/armeabi-v7a/libhello.so
但是 lib
或 lib/armeabi-v7a
没有条目。
因此,您可以通过调用以下命令来测试 ZipEntry 是否在 "lib" 目录下:
zipEntry.getName().startsWith("lib/");
我正在尝试设置一个函数,其中 apk 文件被放置在一个指定的目录中,存储在一个数组中[],然后通过一个 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 时,它 returns 空。我不确定我忘记了什么以及我没有考虑添加什么来阅读里面的内容。我已经看到 Zip/apk 文件被提取然后读取的解决方案,但我只想读取 lib 目录中的内容。那可能吗?
在 APK 文件中看到的内容的屏幕截图确实存在一个 lib 文件(使用 7-Zip 查看内部):
zip 格式的目录不存在。它们在桌面工具中人为显示,但 zip 库仅显示存在的实际文件,不包括目录。
APK 中存在的文件例如是:
lib/arm64-v8a/libhello.so
lib/armeabi-v7a/libhello.so
但是 lib
或 lib/armeabi-v7a
没有条目。
因此,您可以通过调用以下命令来测试 ZipEntry 是否在 "lib" 目录下:
zipEntry.getName().startsWith("lib/");