Файловая иерархия с помощью Android 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 Реализация буквально фильтрует каталоги из вывода.
Ссылка на исходный код

0

Решение

Вы можете достичь своей цели в три этапа, каждый из которых требует некоторого программирования. Суть в том, что все ваши активы находятся в файле APK, и ваше приложение может найти и прочитать файл APK, а его формат — ZIP-архив.

  1. Найдите имя вашего APK файла.
  2. Откройте этот файл для чтения в виде zip-архива.
  3. Повторите содержимое zip для assets/<whatever>,

За 1) можно использовать Java или если вы должны остаться в C ++, фильтр /proc/<pid>/fd, Вы можете найти некоторые системные файлы APK (framework), но ваш APK будет единственным, не системным.

Для 2) см. используйте zlib для просмотра структуры каталогов apk файла в android. Обратите внимание, что Zlib является частью публичных библиотек NDK.

2

Другие решения

Других решений пока нет …