你是不是觉得要去了解Swig命令,还要去了解CMake是什么,不知道CMakeLists文件怎么写。这么多步骤好烦杂啊,这篇文章我会介绍更简单的方法,什么都不需要干,只需要编译一下什么都有了。这篇文章通过把Swig的命令全部集成到Cmake中来,通过编写CMakeLists文件编译即可生成一切你需要的。

一、说明

其实就是Cmake官网支持Swig的封装,也就是把Swig的一系列操作通过Cmake封装到CMakeLists文件中在,在这里面就行一切操作

二、代码

这是我找了好多资料才写好的,因为我的上司说上面方法步骤太多了,于是,逼出最强的我,我就写了这个。只需要修改你生成的Java接口的文件路径和你的so库的名称即可。代码如下

--CMakeLists.txt

#指定CMake的最小版本

cmake_minimum_required(VERSION 3.4.1)

#需要修改的地方

#1.指定Swig生成的java接口的包名,修改"com.geo.earthworklib"即可,生成的位置在app/src/main/java目录下面

set(JAVA_GEN_PACKAGE "com.cjh.hello")

#2.指定最终生成的.so的名称

set(LAST_SO_NAME "hello")

#寻找安装好的swig,其实就是去电脑中找你安装好的Swig环境,所以我们需要提前安装环境。

find_package(SWIG REQUIRED)

include(${SWIG_USE_FILE})

#这是Swing的命令,其实下面操作就是把这个命令封装到Cmake中

#swig.exe -c++ -java -package com.cjh.hello-outdir F:/AllProjects/EarthworkLib/app/src/main/java/com/cjh/hello-o Unix_wrap.cxx Unix.i

string(REPLACE "." "/" JAVA_GEN_SUBDIR ${JAVA_GEN_PACKAGE})

set(JAVA_GEN_DIR ${Project_SOURCE_DIR}/src/main/java/${JAVA_GEN_SUBDIR})

set(SOURCE_GEN_DIR ${Project_SOURCE_DIR}/src/main/cpp)

#JAVA文件输出目录 -outdir

set(CMAKE_SWIG_OUTDIR ${JAVA_GEN_DIR})

#指定一个输出目录名,用于放置生成的源文件。例如输出的UnixJAVA_wrap.cxx文件等的位置

set(SWIG_OUTFILE_DIR ${SOURCE_GEN_DIR})

#指定包名 -package

set(CMAKE_SWIG_FLAGS -c++ -package ${JAVA_GEN_PACKAGE} )

#c ++模式

set_property(SOURCE src/main/cpp/Unix.i PROPERTY CPLUSPLUS ON)

#开始生成

swig_add_library(swig LANGUAGE java SOURCES src/main/cpp/Unix.i)

#这里其实也会生成一个libswig.so的库,只不过我不需要所以没保存

#设置生成的so动态库最后输出的路径

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI})

#创建一个静态或者动态库,并提供其关联的源文件路径,开发者可以定义多个库,

#CMake会自动去构建它们。Gradle可以自动将它们打包进APK中。

#第一个参数——LAST_SO_NAME:是库的名称

#第二个参数——SHARED:是库的类别,是动态的还是静态的

#第三个参数——src/main/cpp/UnixJAVA_wrap.cxx:是库的源文件的路径

add_library(${LAST_SO_NAME} SHARED src/main/cpp/UnixJAVA_wrap.cxx )

三.总结

文章虽短,但都是精华,资料很难找啊,太难了,我真的太难了,但能给你们帮助我就开心,哈哈哈,你们知道该干嘛?