这几天一直在弄模板生成算法移植到手机GPU上。先期OpenCL代码是在PC上验证,cl文件到手机上之后NDK读取就遇到问题,所以研究下安卓NDK下读取文件的问题。
在JNI的Android.mk中,添加:
把OpenCL的cl文件放置到工程assets中,Java代码如下:
import android.content.res.AssetManager;
public native String ReadFile(AssetManager assetManager) //NDK函数申明
ReadFile(getAssets()); //调用
在NDK中C++代码中
JNIEXPORT jstring JNICALL Java_com_example_get_1mb_MainActivity_ReadFile(JNIEnv* env, jobject thisobject, jobject assetManager){
jstring resultStr;
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
AAsset* asset = AAssetManager_open(mgr, "genmb.cl",AASSET_MODE_UNKNOWN);
/*获取文件大小*/
off_t bufferSize = AAsset_getLength(asset);
char *buffer=(char *)malloc(bufferSize+1);
buffer[bufferSize]=0;
int numBytesRead = AAsset_read(asset, buffer, bufferSize);
/*关闭文件*/
AAsset_close(asset);
return env->NewStringUTF("ok");
}
在JNI的Android.mk中,添加:
LOCAL_LDLIBS := -landroid