Android 嵌入 LuaJIT 的曲折道路

相关链接:Windows 下编译 LuaJIT 懒人与伸手党可以直接看最底部。 为什么使用 LuaJIT Lua 官方版的编译嵌入相对简单,但是为什么要用 LuaJIT 呢?我所了解到的优势有: 更高的运行效率。 支持运行 Lua 编译后的机器码。 虽然 Lua 也支持编译脚本,但是编译出来的机器码文件并不是跨平台的,也就是说在 PC 上编译的脚本在 Android 中无法使用。至于如何编译 Android 上使用的脚本,至今没有找到方案。 脚本的编译不仅可以提高载入速度,更可以一定程度上保护源码,避免被篡改。这也是我使用 LuaJIT 的主要原因。 LuaJIT NDK 编译 系统环境:Ubuntu 17 x64 Windows 下使用 Cygwin 应该也是可以的。 由于我们系统是64位,编译的目标很可能是32位的,所以先确认安装了32位所需的编译环境: sudo apt-get install libc6-dev-i386 NDK 配置 已经配置好 NDK 的可以略过本章节。 去 NDK 官网下载适合自己的版本并解压。这里使用的是 android-ndk-r14b-linux-x86_64. wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip 解压放在 /opt/android/ndk. 然后配置环境变量。这里直接配置全局的环境变量。修改 /etc/proile 在最后加上 export PATH=/opt/android/ndk:$PATH 注销重新登录一下使之生效。测试下命令 ndk-build,能运行则是配置完毕。 编译 首先去 LuaJIT 官网下载源码并解压。 wget https://luajit.org/download/LuaJIT-2.0.5.tar.gz tar -zxvf LuaJIT-2....

December 31, 2017 · Chenhe

Android Lua 相互调用

前言 本文基于 Lua 5.3. Lua 是一个轻量级脚本语言,常用于嵌入其他语言作为补充。关于更多Lua本身的问题不在本文讨论范围之内。 在 Android 中嵌入 Lua 优点很多,借助 Lua 脚本语言的优势,可以轻松实现动态逻辑控制,应用可以随时从服务器读取最新 Lua 脚本文件,在不更新应用的情况下修改程序逻辑。 可惜 Lua 官方只提供了 C API ,而 Android 主要使用 JAVA 作为开发语言。我们可以借助 JNI 来间接实现在 Android 中嵌入 Lua 。 准备 自己实现 JNI 是一件很费力的事情,还好有人已经造好了轮子叫做 Luajava ,并且又有人基于 Luajava 做了 Android 专用库。网上流传最广的是 Androlua ,不过作者已经多年不维护了,对 Lua 的支持依然停留在5.1并且有一些bug,有人Fork了这个项目,并将其更新至 Lua 5.3 :New Androlua ,不过这个项目也存在一些问题,我修复了一下但是作者并没有处理我的 pull request ,各位可以直接使用我修复优化后的:Android-Lua. 在修复bug的同时,我也添加了一些中文注释,减少第一次接触 Lua C API 朋友们的学习记忆成本。 由于最终需要调用 Lua C API,所以请先配置 NDK 开发环境。在 Android Studio 中打开 SDK Manager,切换到 SDK Tools 标签页,勾选CMake、LLDB、NDK下载安装之。...

December 15, 2017 · Chenhe

Windows 下编译 LuaJIT

准备 这里使用 Visual studio 自带的命令行工具来进行编译,所以需要安装好VS. 下载 LuaJIT 源码 准备好VS. 编译 首先打开VS命令行工具。可以按Win+S,输入prompt来找到它。如图。 解压 LuaJIT 源码,并进入到解压目录/src下。输入msvcbuild开始编译。 看到=== Successfully built LuaJIT for xxxxx ===则是编译成功了。 在解压目录/src下可以找到编译生成的luajit.exe和lua51.dll. 安装 在任意地方新建一个文件夹(例如e:\LuaJit)。把刚才生成的两个文件复制到新建的文件夹下。 新建子目录e:\LuaJit\lua,把解压目录/src的jit文件夹整体复制到子目录下。 (可选)把e:\LuaJit添加到系统Path环境变量里。 运行 打开cmd。 如果没有添加环境变量则先定位到LuaJit安装目录。 输入luajit +文件名 即可运行Lua脚本。 输入luajit -b +Lua脚本+目标文件名,即可编译脚本。

December 15, 2017 · Chenhe