gpt4 book ai didi

android - Android 原生 AAssetManager 的文件层次结构

转载 作者:行者123 更新时间:2023-11-30 03:28:54 33 4
gpt4 key购买 nike

问题

我想知道如何从 native 代码在 Android 中创建 Assets 文件夹的文件层次结构。我正在使用 AAssetManager_openDirAAssetDir_getNextFileName 不返回任何目录名称,所以基本上我无法深入了解层次结构,因为我无法获取子文件夹的名称。有什么办法可以用 AAssetManager 解决这个问题,还是我应该用 Java 实现这个?

例子

Assets 看起来像

a/
file1
file2
b/
file3
c/
file4

C++代码

AAssetDir* assetDir = AAssetManager_openDir(env, "");
// filename is NULL since there is only folders at the root folder
const char* filename = AAssetDir_getNextFileName(assetDir);
AAssetDir_close(assetDir);
AAssetDir* assetDir = AAssetManager_openDir(env, "a");
// filename is "file1"
const char* filename = AAssetDir_getNextFileName(assetDir);
// filename is "file2"
filename = AAssetDir_getNextFileName(assetDir);
AAssetDir_close(assetDir);

编辑:

我发现 AAssetDir_getNextFileName 实现实际上是从输出中过滤目录。 Link to source code

最佳答案

您可以通过三个步骤实现您的目标,每个步骤都需要一些编程。最重要的是,您的 Assets 都存在于 APK 文件中,您的应用可以查找和读取 APK 文件,其格式为 ZIP 存档。

  1. 找到您的 APK 文件名。
  2. 打开此文件以作为 zip 存档读取。
  3. 迭代 assets/<whatever> 的 zip 内容。

对于 1),你可以 use Java 或者如果你必须留在 c++,过滤 /proc/self/fd 。您可能会找到一些系统 APK 文件(框架),但您的 APK 将是唯一一个不是系统的。

对于 2),请参阅 use zlib to list directory structure of apk file in android 。请注意,zlib 是公共(public) NDK 库的一部分。

关于android - Android 原生 AAssetManager 的文件层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225251/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com