我需要檢查apk文件中是否存在某個目錄。通過本地代碼檢查apk中是否存在目錄(文件夾)
的android/asset_manager.h
API似乎是不一致的 - 當AAsset* AAssetManager_open(AAssetManager* mgr, const char* filename, int mode);
無法打開文件,它返回NULL,但對於目錄AAssetDir* AAssetManager_openDir(AAssetManager* mgr, const char* dirName);
的實現總是返回new AAssetDir(...)
,即使在內部它無法打開/找到的apk的目錄。
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最好地做到這一點?
http://stackoverflow.com/questions/13317387/how-to-get-file-in-assets-from-android-ndk – NuSkooler 2014-09-29 16:26:26