使用Android Native AassetManager文件层次结构



问题

我想知道如何通过本机代码中的Android中的资产文件夹进行文件层次结构。我正在使用AAssetManager_openDir,但是AAssetDir_getNextFileName没有返回任何目录名称,因此基本上我无法深入研究层次结构,因为我无法获得子文件夹的名称。有什么方法可以通过AAssetManager解决此问题,或者我应该在Java中实现此问题?

示例

资产看起来像

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实现实际上是从输出中过滤目录。链接到源代码

您可以三个步骤实现目标,每个步骤都需要一些编程。最重要的是,您的资产全部存在于APK文件中,您的应用程序可以找到并读取APK文件,其格式是zip档案。

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

对于1),您可以使用Java,或者必须保留在C 中,请过滤器/proc/self/fd。您可能会找到一些系统APK文件(框架),但是您的APK将是唯一一个不是系统的文件。

对于2),请参见使用Zlib在Android 中列出APK文件的目录结构。请注意, zlib 是公共NDK库的一部分。

相关内容

  • 没有找到相关文章

最新更新