问题
我想知道如何通过本机代码中的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档案。
- 找到您的APK文件名。
- 打开此文件以读取为zip存档。
- 迭代
assets/<whatever>
的ZIP内容。
对于1),您可以使用Java,或者必须保留在C 中,请过滤器/proc/self/fd
。您可能会找到一些系统APK文件(框架),但是您的APK将是唯一一个不是系统的文件。
对于2),请参见使用Zlib在Android 中列出APK文件的目录结构。请注意, zlib 是公共NDK库的一部分。