undefined reference to 'AAssetManager_fromJava'
程序员文章站
2022-06-22 20:02:49
...
在Android JNI开发时,有时需要在C++文件中读取assets中的文件,通常的做法是通过public native void readFromAssets(AssetManager ass, String filename);方法实现,网上有很多资料,一般是在Java中定义native方法:
public native void readFromAssets(AssetManager ass, String filename);
然后再C++中实现
extern "C"
void Java_ghome_snda_com_ndktest_MainActivity_readFromAssets(JNIEnv* env,jclass tis
,jobject assetManager,jstring filename)
{
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
if(mgr==NULL)
{
__android_log_print(ANDROID_LOG_INFO, "zj", ":%s", "AAssetManager==NULL");
//LOGI(" %s","AAssetManager==NULL");
return ;
}
/*获取文件名并打开*/
jboolean iscopy;
const char *mfile = env->GetStringUTFChars(filename, &iscopy);
AAsset* asset = AAssetManager_open(mgr, mfile,AASSET_MODE_UNKNOWN);
env->ReleaseStringUTFChars(filename, mfile);
if(asset==NULL)
{
// LOGI(" %s","asset==NULL");
__android_log_print(ANDROID_LOG_INFO, "zj", ":%s", "asset==NULL");
return ;
}
/*获取文件大小*/
off_t bufferSize = AAsset_getLength(asset);
//LOGI("file size : %d\n",bufferSize);
__android_log_print(ANDROID_LOG_INFO, "zj", "file size : %d\\n", bufferSize);
char *buffer=(char *)malloc(bufferSize+1);
buffer[bufferSize]=0;
int numBytesRead = AAsset_read(asset, buffer, bufferSize);
// LOGI(": %s",buffer);
__android_log_print(ANDROID_LOG_INFO, "zj", ": %s\\n", buffer);
free(buffer);
/*关闭文件*/
AAsset_close(asset);
}
我的目录结构:
我所实现的功能是在C++中读取test.txt中的内容。
编译后报错:
解决方法::NDK使用的CmakeList.txt,该错误是由于CMake文件配置错误引起的
只需要在find_library和target_like_libraries中加入Android声明即可:
网上很多针对这个问题的解决方案都说的模棱两可,让人看不明白,现在通过这种方法成功解决。
上一篇: 前端基础(十二):HTML规范
下一篇: Ribbon的入门案例
推荐阅读
-
Notice: Undefined index: page in E:PHP est.php on line 14
-
PHP Undefined index报错的修复方法
-
配置c3p0-config.xml数据库连接池,jdbcurl配置项报错Type The reference to entity "useUnicode" must end with the ';' delimiter.
-
Windows编译OpenCV4Android解决undefined reference to std错误
-
Notice: Undefined index: page in E:PHP est.php on line 14
-
php运行出现Call to undefined function curl_init()的解决方法
-
Apache启动提示错误undefined symbol: libiconv_open解决方法
-
php Notice: Undefined index 错误提示解决方法
-
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
-
js删除对象/数组中null、undefined、空对象及空数组方法示例