我必须在 Android 中使用assetmanager 来打开一些文件。我正在使用 Assetmanager 打开一个 lua 文件。为此,我使用 AAssetmanager 在 JNI 的 init 函数中创建了一个 luastate。然后我使用这个 luastate 来调用我的 lua 文件中的函数。但是,我正在运行一个图像处理应用程序,它需要为每一帧打开和关闭这个 luastate,这会减慢我的速度。
我目前正在这样做 -
JNIEXPORT jstring JNICALL
Java_com_torch_torchdemo_TorchDemo_callTorch( JNIEnv* env,
jobject thiz,
jobject assetManager) {
// get native asset manager
static jobject globalManager = env->NewGlobalRef(assetManager);
AAssetManager* manager = AAssetManager_fromJava(env, globalManager);
assert( NULL != manager);
lua_State *L = initstate(manager)
char file[] = "main.lua";
int ret;
long size = android_asset_get_size(file);
lua_getglobal(L,"test_func");
return nev->NewStringUTF(buffeR);
}
在此之后,我不知道如何在另一个 jni 函数中使用 globalManager 对象,我会重复调用这个对象。上面的那个只会被调用一次。我曾尝试在另一个函数中直接使用 globalManager ,但这给了我 globalManager 未在此范围内定义的错误。我也找不到任何关于如何使用全局引用的教程。我找到的那些直接使用全局对象或类。这给了我一个错误。