NDK学习之安卓平台下编译lua
扫描二维码
随时随地手机看文章
折腾了大半天lua....很蛋疼!
lua的编译有2种方式:
1.先编译源码成静态库,再把静态库嵌入到用到他的jni程序里
2. 直接把源码和jni一起编译
推荐方式1,这样静态库我们以后还用得着的话,会方便很多
顺便说下编译过程的几个坑。。。。
方式1:
新建目录 lua/jni 把乱源代码放进去,再新建android.mk 把lua文件列表写进去
文件很多,可以参考WINDOWS下lua编译的文件列表,一样的.这里直接给出文件,大家可以copy方便
第一步:
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := lua LOCAL_SRC_FILES := lapi.c lauxlib.c lbaselib.c lcode.c ldblib.c ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c ltable.c ltablib.c ltm.c lundump.c lvm.c lzio.c LOCAL_LDLIBS := -ld -lm include $(BUILD_STATIC_LIBRARY)
LOCAL_LDLIBS := -ld -lm 可以删除 建议大家删掉 这里没用。
源码编译好了,我们现在需要写个文件让他跟java交互不是吗,因为JAVA和C/C++的数据类型不一样的。
第二步:
然后就从网上下载luajava文件,当然我下面会提供给大家的,网上也有,关键是用了好几个都是程序崩溃...。
然后就是编译这个luajava文件。
新建目录 :luajava/jni
把luajava.c 放进去,把lua编译出来的静态库也放进去。另外需要把Lua的4个头文件也放进去:lua.h lauxlib.h luaconfig.h lualib.h
然后编写Android.mk
LOCAL_PATH:= $(call my-dir) # 需要把静态库导入 # include $(CLEAR_VARS) LOCAL_MODULE := lua LOCAL_SRC_FILES := liblua.a include $(PREBUILT_STATIC_LIBRARY) # 第二个为动态库,在动态库中使用我们编译的静态库 include $(CLEAR_VARS) LOCAL_MODULE := luajava LOCAL_SRC_FILES := luajava.c LOCAL_STATIC_LIBRARIES := lua include $(BUILD_SHARED_LIBRARY)
其中 liblua.a是第一步里面生成的。
执行
ndk-build 生成了luajava.so ,好了,完事。
方式2:和第一种差不多,简单说下:
lua源码和luajava全放到一个jni目录下,
编写Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := luajava LOCAL_SRC_FILES := lapi.c lauxlib.c lbaselib.c lcode.c ldblib.c ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c ltable.c ltablib.c ltm.c lundump.c lvm.c lzio.c luajava.c include $(BUILD_SHARED_LIBRARY)
ndk-build 生成成功. 和第一种的第一步一样,就是多了个luajava.c文件。。。。。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是安卓调用了。首先下载后面提供的java代码,放到安卓工程的src目录,并且把luajava放到lib目录
import org.keplerproject.luajava.*;//包含luajava的源代码
在需要测试的地方:
LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
L.LdoString("text = 1+98");
L.getGlobal("text");
String text = L.toString(-1);
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(text);
setContentView(tv);
到此为止了,有问题大家可以交流下,另外说下,最好下载我给的luajava ,网上的我被坑了1天,就是编译出来,安卓运行报错崩溃!