在Android Lua脚本中使用require函数加载拓展动态库so文件

      上一篇文章粗略的说了在Android中使用Lua脚本实现模拟按键的方法,之前做lua拓展用的方法都是把自己的拓展代码放到lua源码里面一块编译,自己一直想拓展部分代码单独的编译成一个so文件,然后通过require的方式去加载自己的拓展库,由于开始对lua不熟悉,所以只能暂时把代码放一块编译了。

       现在终于找到解决办法,require函数调用是会去对应package.path和package.cpath定义好的目录下寻找对应名字的.lua或者.so文件,查看源码知道这两个属性定义的目录如下:

        但是Android的应用安装的后,so文件一般会存放在/data/app/应用包名/lib/下面,这个路径我们可以通过

  获取到。要使得脚本调用require函数是能搜索到我们的so库,就要把nativeLibraryDir设置到package.cpath中去,代码如下:

        这样lua就能搜索到我们的拓展的so文件了。运行脚本后lua能找到我们自定义的so文件,但是爆出了新的错误:

"dynamic libraries not enabled; check your Lua installation",查找了资料后发现是因为require函数会调用dlopen,所以我们在编译时设置cFLAGS把定义的宏打开就行了,Android studio gradle设置cFLAGS如下:


        查看源码是可以看到"LUA_USE_DLOPEN"和“LUA_USE_POSIX”的说明:

 

       大概的意思是要使得lua能动态链接,就要编译选项加上

-DLUA_USE_DLOPEN


猜你喜欢

转载自blog.csdn.net/u010949962/article/details/79299902