自己根据 官网 LUA5.1 和 luajava1.1 源码编译 编译步骤:1)去Lua 官网 选择需要版本下载源码
2)去下载 LuaJava 三方裤子源码,这个裤子最新版本是 2007 年最后更新的 [luajava-1.1] 版本,这个裤子里面只提供了 luajava.c 文件没有提供 luajava.h 文件,这个 luajava.h 文件是根据 LuaState.java 这个类生成的,你可以采用命令行 javac 将 Luajava.java 编程成 Luajava.class 文件,再用 javah 将 Luajava.class 文件编译成 luajava.h 文件,这是 java 函数与 C++ 函数对应的静态注册方法,即通过特定的规则来写,此处方法名可以随意起名字,然后还可以用动态注册的方式关联两个方法(显然,静态注册要简单一些)。
步骤细节:
1.将 luajava解压包内的 org 包整个 java 源码放在 工程目录 java 下面,
3)配置NDK 编译 so 库,编译方式自行选择(ndk build 和 CMake 方式),笔者目前使用的是 Stutio 3.0.1 ,所以采用的是 CMake 编译方式,下面简单介绍下编译流程:
1、在SDK Tools 中勾选安装 CMake、LLDB、NDK
<img alt="ndkconfig">
2、File -> New -> New Project,在如下界面中勾选Include C++ Support
,然后一路 Next,直到 Finish 为止即可(图省略)。
3、创建完成项目发现与常规项目比多了.externalNativeBuild文件夹、cpp文件夹、CMakeLists.txt文件。
.externalNativeBuild文件夹:cmake编译好的文件, 显示支持的各种硬件等信息。系统生成。
cpp文件夹:存放C/C++代码文件。
CMakeLists.txt文件:CMake脚本配置的文件。需要自己配置编写。
然后我们把上面第二步下载到的 lua 和 luajava c 代码全部放在 cpp 文件夹下,准备进行编译。(这里稍微提一句,笔者 菜鸟一枚, c 代码不懂,所以去官网下载完了,根据按照 CMake 编译规则进行编译,采坑不断。开始下载完 luajava 裤子,发现没有 luajava.h 文件,查了下,这个文件是根据 LuaState.java 编译出来的,于是笔者自己用 LuaState 编译了一个,然后 lua 源码用的是 5.3.3 版本,然后进行编译 so 库,报错。查了一下,是因为 luajava1.1 版本当时作者对应的是 lua5.1 版本,所以 api 有差异,于是重新下载了一个 lua5.1 版本编译,报错。查原因是 sdk21 之后版本采用一个原生的 c 方法,于是直接将 sdk 最小版本改成 21,编译,报错。查了一下说是 c 文件中有两个 main 函数,于是直接将一个 main 函数注释掉,一顿折腾终于编译通过,所以最后笔者从 gayhub 上找了别人升级过的 c 文件进行编译,比较稳。)
配置 CMakeLists.txt 文件:
#设置要编译 c 文件的 路径(多个 c 文件)
aux_source_directory(src/main/cpp SRC_LIST)
add_library( # Sets the name of the library.
luajava
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
${SRC_LIST}
)
find_library( # Sets the name of the path variable.
log-lib )
target_link_libraries( # Specifies the target library.
luajava
# Links the target library to the log library
# included in the NDK.
${log-lib} )
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
配置 app/build.gradle 文件
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_ARM_NEON=TRUE", "-DCMAKE_BUILD_TYPE=Debug"
/* cppFlags "-std=c++11 -frtti -fexceptions"*/
cppFlags "-frtti -fexceptions"
abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'arm64-v8a', 'mips', 'mips64', 'x86_64'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
直接 Make Project ,然后在 app\build\intermediates\cmake\debug\obj 文件夹下面就可以看到各种 so 文件
<img alt="so">
使用
luajava
下的 org 文件夹拷贝到工程你的工程 src/main/java
目录下jniLibs/armeabi
下的 libluajava.so
重命名为 libluajava-1.1.so
或者修改此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。