Интересно, как сделать файловую иерархию папки активов в 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-архив.
assets/<whatever>
,За 1) можно использовать Java или если вы должны остаться в C ++, фильтр /proc/<pid>/fd
, Вы можете найти некоторые системные файлы APK (framework), но ваш APK будет единственным, не системным.
Для 2) см. используйте zlib для просмотра структуры каталогов apk файла в android. Обратите внимание, что Zlib является частью публичных библиотек NDK.
Других решений пока нет …