我需要检查 apk 中是否存在某个目录。
android/asset_manager.h
api 似乎不一致 - 当无法打开文件时返回 NULL ,AAsset* AAssetManager_open(AAssetManager* mgr, const char* filename, int mode);
但对于目录AAssetDir* AAssetManager_openDir(AAssetManager* mgr, const char* dirName);
的实现总是返回 a new AAssetDir(...)
,即使在内部它无法在 apk 中打开/找到目录。
前向声明并且它的实现隐藏在 .cpp 文件中是非常令人恼火AAssetDir
的,否则(可能?)可能检查内部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?