一部のファイルを開くには、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);
}
この後、globalManager オブジェクトを別の jni 関数 (繰り返し呼び出す関数) で使用する方法がわかりません。上記のものは一度だけ呼び出されます。別の関数で globalManager を直接使用しようとしましたが、globalManager がこのスコープで定義されていないというエラーが表示されます。グローバル参照の使用方法に関するチュートリアルも見つかりません。私が見つけたものは、グローバル オブジェクトまたはクラスを直接使用しています。私の場合、それは私にエラーを与えます。