在android里使用lua的文章网上已经有很多,这里就不具体说了。但网上大多数的例子只是简单的在java里调用了LdoString,很少有提到如何加载lua脚本文件。所以,这里主要说一下如何直接调用lua脚本文件的方法。我在网上查找到的方法以及自己研究后的结果整理如下:
lua脚本是文本文件,为了不让android将其编译成二进制的形式,一般将其放到res/raw下面或者assets下面。但在android里所有这些资源都是在apk包里的(本人经验不是很多,这是我目前所以理解的),所以不能够直接通过文件路径的方法访问,于是luajava的LdoFile也无法正常加载lua文件。那么只好通过变通的方式执行lua脚本了。
假设我们的lua文件为/res/raw/hello.lua(放在assets下也是同样的道理)
一、利用流读取lua脚本的内容并将其赋值给String变量,通过LdoString执行。
网上有类似的方法,整理如下:
Java代码 L.LdoString(readStream(getResources().openRawResource(R.raw.hello)));
其中getResources().openRawResource(R.raw.hello))返回的是hello.lua的文件流。
readStream是读取全部文件内容,并以String的类型返回,代码如下
Java代码 privateString readStream(InputStream is) {
try{
ByteArrayOutputStream bo = newByteArrayOutputStream();
inti = is.read();
while(i != -1) {
bo.write(i);
i = is.read();
}
returnbo.toString();
} catch(IOException e) {
Log.e("ReadStream","读取文件流失败");
return"";
}
}
这样就可以通过LdoString的方式执行lua脚本了。
二、将lua脚本复制到files文件夹下,再执行LdoFile
该方法主要是将apk中的lua文件复制出来,以便让程序能够通过文件路径的方式访问到脚本,进而可以执行LdoFile方法。
Java代码 privatevoidcopyResourcesToLocal() {