apk に特定のディレクトリが存在するかどうかを確認する必要があります。
android/asset_manager.hAPI に一貫性がないようです - ファイルを開くことができない場合は NULL を返しますがAAsset* AAssetManager_open(AAssetManager* mgr, const char* filename, int mode);、ディレクトリAAssetDir* AAssetManager_openDir(AAssetManager* mgr, const char* dirName);の実装では、new AAssetDir(...)内部的に apk でディレクトリを開く/見つけることができなかったとしても、常に a を返します。
AAssetDir前方宣言され、その実装が .cpp ファイルに隠されていることは非常に腹立たしいことです。そうでなければ、内部AssetDirオブジェクトの有効性をチェックすることは (おそらく?) 可能でした。
私が現在検討している別のオプションがあります-Javaを呼び出して次のようなことをします:
public static boolean folderExistsInApk(final String path){
AssetManager assetManager = activity.getAssets();
try{
//if .list would fail, it would throw IOException
//which would signal that there is no such directory
assetManager.list(path);
}catch(Exception e){
return false;
}
return true;
}
しかし、それは私には「汚い」ように見え、間違いなくかなり遅くなります (これは私の特定のコードでは大きな要因ではありませんが、それでも - 不必要な悲観化を避けることは良いコーディング方法です)。
私は何かを逃しましたか?ディレクトリがapkに存在するかどうかをネイティブコードのみで確認することはできますか? そうでない場合-jniでそれを行うにはどうすればよいですか?