一.下载并解压
swig 下载地址:www.swig.org/download.ht…
注意windows平台下载zip
二.环境配置
将swig.exe所在目录 添加到环境变量Path中
终端执行:swig -version 如果有输出测配置成功
三、生成JNI
1.编写c++代码
example.h
/* File : example.h */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n * fact(n - 1);
}
int my_mod(int x, int y) { return (x % y);}
example.cpp
/* File : example.cpp */
#include "example.h"
example.i
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
example.i 中 extern 后为需要生成的JNI接口:方法或者属性
在src/main/cpp 目录下执行命令:
生成c++文件
swig.exe -c++ -java -package com.apress.swig -outdir ../java/com/apress/swig example.i
生成c文件
swig -java -package com.apress.swig -outdir ../java/com/apress/swig example.i
-package后是输出java文件的包名
-outdir 后 是输出java文件的目录
执行后会在-outdir中生成java接口,可以直接调用 如图
四、编译apk
CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(example SHARED example.cpp example_wrap.cxx)
find_library(log-lib log)
target_link_libraries(example ${log-lib})
app/build.gradle
android {
defaultConfig {
externalNativeBuild {
cmake { cppFlags "-std=c++11" abiFilters "armeabi-v7a"}
}
}
externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } }
}
cmake配置好后make project 就可以生成包含 example.so文件的apk了
五、测试JNI
fun test() {
System.loadLibrary("example")
Log.d(TAG, "fengjing:" + example.getMy_variable())
Log.d(TAG, "fengjing:" + example.fact(5))
}