在我的应用中,我必须将文件从资产文件夹传递到共享库。 我现在不能使用jni。 我在我的项目中使用预编译的共享库,其中我有我的文件的硬编码路径,但我收到错误“没有这样的文件或目录”。 所以在我的 .apk 文件中,我在 libs / armeabi-v7a 文件夹中有 .so 文件,而我在 / assets中的文件文件夹。
我试过这样做:
char *cert_file = "/assets/cacert.cert";
av_strdup(cert_file);
以及其他一些路径,但它不起作用。
有可能吗?
答案 0 :(得分:14)
您可以在C ++中使用AAssetManager类。
基本上你需要:
AAssetManager* assetManager
用它来读取你的文件:
// Open your file
AAsset* file = AAssetManager_open(assetManager, filePath, AASSET_MODE_BUFFER);
// Get the file length
size_t fileLength = AAsset_getLength(file);
// Allocate memory to read your file
char* fileContent = new char[fileLength+1];
// Read your file
AAsset_read(file, fileContent, fileLength);
// For safety you can add a 0 terminating character at the end of your file ...
fileContent[fileLength] = '\0';
// Do whatever you want with the content of the file
// Free the memoery you allocated earlier
delete [] fileContent;
您可以找到official ndk documentation here。
编辑: 获取AAssetManager对象:
- 在原生活动中,您主要作为参数 android_app * app ,您只需要在此处获取:app-> activity-> assetManager
- 如果您有Java活动,则需要通过JNI发送java对象AssetManager的实例,然后使用函数AAssetManager_fromJava()
答案 1 :(得分:2)
您的资产已打包到您的apk中,因此您无法在运行时直接引用它们,就像您提供的示例代码一样。这里有2个选项:
Context.getAssets().open('cacert.cert')