string relativePath = "scripts/test.pb"; // this is ok
string relativePath = "./scripts/test.pb"; // this can not open the file"
AAsset* asset = AAssetManager_open(FileUtilsAndroid::assetmanager,
relativePath.c_str(),
AASSET_MODE_UNKNOWN);
当我使用此功能打开android apk文件时,“relativePath”包含“。”无法工作。我不明白为什么?我看不到“AAssetManager_open”的源代码,所以只需要帮助。
答案 0 :(得分:1)
如果您查看AAssetManager_open的源代码,您会看到它调用AssetManager::open,这样做:
String8 assetName(kAssetsRoot);
assetName.appendPath(fileName);
其中kAssetsRoot是一个静态const char *,定义为保存值" assets"
如果您使用" ./ scripts / test.pb"作为文件名,这将产生" assets /./ scripts / test.pb" (这是一个有效的unix路径名,即你可以添加尽可能多的" ./"或" /"它应该仍然是一个有效的路径),但在{{3}内它附加了" assets /./ scripts / test.pb"到ap.path可能会导致callstack进一步出现问题,即在AssetManager::openNonAssetInPathLocked中调用给定文件路径上的Asset::createFromFile和open。