2017-09-14 6 views
0

Androidのファイル階層をネイティブコードから作成する方法は不思議です。私はAAssetManager_openDirを使用していますが、AAssetDir_getNextFileNameはディレクトリ名を返しません。基本的には、サブフォルダの名前を取得できないため、基本的に階層構造を詳しく調べる方法がありません。 AAssetManagerでこの問題を解決する方法はありますか、これをJavaで実装する必要がありますか?AndroidネイティブAAssetManagerを使用したファイル階層

:資産は

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); 

EDITのように見えます

AAssetDir_getNextFileNameの実装では、文字通り出力からディレクトリをフィルタリングすることがわかりました。 Link to source code

+0

これは、https://stackoverflow.com/questions/26101371/checking-if-directory-folder-exists-in-apk-via-native-code-onlyの複製ではありませんか? –

+0

@AlexCohnいいえ。その質問との主な違いは、あらかじめフォルダ名がわからないことです。実行時にそれを発見したいのです。 – vganin

答えて

1

3つのステップで目標を達成できますが、それぞれにはプログラミングが必要です。一番下の行は、アセットがすべてAPKファイルに保存されており、アプリがAPKファイルを検索して読むことができ、その形式はZIPアーカイブです。

  1. APKファイル名を探します。
  2. このファイルを開いてzipアーカイブとして開きます。
  3. assets/<whatever>のジップの内容を繰り返します。

1)の場合はuse Java、またはC++の場合は/proc/<pid>/fdにフィルタリングする必要があります。いくつかのシステムAPKファイル(フレームワーク)があるかもしれませんが、APKだけがシステムではありません。

2)については、use zlib to list directory structure of apk file in androidを参照してください。 zlibは公開NDKライブラリの一部です。

関連する問題