JNI通过构建工具封装Swig一步生成.so

#指定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 )

(0)

相关推荐