为什么android ndk函数AAsetManager_open错误,当路径是这样的

时间:2014-09-26 16:01:21

标签: android android-ndk

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”的源代码,所以只需要帮助。

1 个答案:

答案 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::createFromFileopen