项目简介
这是一个基于Java和Lua交互的Android应用示例,借助JNI(Java Native Interface)达成Java和Lua间的通信。该应用能在Android平台执行Lua脚本,实现Java代码调用Lua函数,同时Lua脚本也可调用Java函数并处理返回结果。
项目的主要特性和功能
- 双向交互:具备Java和Lua的双向通信机制,Java可调用Lua函数,Lua脚本也能调用Java函数。
- 脚本执行:支持在Android设备上执行Lua脚本,脚本可访问Android API进行文件读写、网络请求等操作。
- 状态管理:通过
LuaState
类管理Lua状态机,保障Java和Lua通信正常。 - 函数调用:Lua脚本能调用Java类方法或Java库函数。
- 对象注入:Lua脚本可注入Java对象并调用其方法,对象可以是Android组件或自定义Java对象。
- 回调机制:Java函数可注册为Lua全局函数,供Lua脚本调用并传递结果。
安装使用步骤
编译步骤
- 新建一个工程。
- 在
local.properties
中配置ndk.dir
路径,在gradle.properties
中配置使用ndk:ndk.dir=/Users/slack/Library/Android/sdk/ndk-bundle android.useDeprecatedNdk=true
- 复制lua源码到
cpp/lua
下,使用5.3.5的源码,删掉luac.c
,注释掉lua.c
里的main
方法。 liolib.c
编译时会报错,在luaconf.h
内替换lua_getlocaledecpoint()
: ```
if !defined(lua_getlocaledecpoint)
//#define lua_getlocaledecpoint() (localeconv()->decimal_point[0])
define lua_getlocaledecpoint() ('.')
endif
``
5. 编译时若提示lua的资源找不到,将头文件
lua.h替换为引用
lua.hpp头文件。
6. 本项目仅编译了
armeabi - v7a和
arm64 - v8a的包。
7. 有
andoirdlua和
luajava两套资源,分别在
luabridge.cpp和
luajava.cpp下有
JNI_OnLoad`,测试时只能保留一个该方法,另一个需注释掉。
运行应用
- 确保已安装Android Studio,并在项目中正确配置了Android SDK和NDK(Native Development Kit)。
- 在Android设备上运行应用,主界面会显示,可点击按钮触发Lua脚本执行和与Java代码的交互。
- 在Android设备上直接运行Lua脚本,观察执行结果。
- 根据需要修改Lua脚本和Java代码,进行调试和测试,确保交互机制正常工作。
注意事项
- 需在Android项目中正确配置JNI(Java Native Interface)和NDK(Native Development Kit),以便使用C/C++代码。
- 确保Java和Lua之间的通信机制正确实现,涵盖Java函数注册、Lua函数调用、数据传递等。
- 使用Lua脚本时,注意其执行环境和安全性,避免潜在的内存泄漏或错误处理。
- 根据Android平台的特点和限制,合理设计Java和Lua之间的交互逻辑,确保应用稳定运行。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】