打包so文件:
1.新建一个Native C++文件
项目结构在build.gradle中的android的defaultConfig中添加:
externalNativeBuild { //使用Cmake工具
cmake {
cppFlags""
}
}
在buildTypes中添加:
externalNativeBuild {
cmake { //配置CMakeLists.txt路径
path "src/main/cpp/CMakeLists.txt" //找到CMakeLists,根据CMakeLists.txt来编译so文件
version"3.10.2"
}
}
native-lib.cpp:需要暴露给native的c++类
JNIEXPORT jstring: 代表返回一个 jstring类型,即string类型
Java_com_example_myapplication_MainActivity:代表路径Project\MyApplication\app\src\main\java\com\example\myapplication\MainActivity.java
Java_com_example_myapplication_MainActivity_stringFromJNI( //stringFromJNI为c++方法
JNIEnv *env,
jobject /* this */) {
std::string hello ="Hello from C++";
return env->NewStringUTF(hello.c_str()); //返回一个java字符串
}
CMakeLists.txt:配置了将要打包的so文件和c++文件信息
2.点击Build->Make Project 来编译工程
3.在app-build-intermediates-cmake-debug(release)下可以找到so文件
导入so文件:
1.新建一工程,将so文件挪到工程中(或者在src/main中新建jniLibs文件夹 ,把.so复制进去即可)
22.build.gradle中配置:
android下添加:sourceSets {
main {
jniLibs.srcDirs = ['libs'] //指定so包的路径
}
}
3.代码中:
static {
System.loadLibrary("native-lib"); //加载so库
}
Log.i("heroonehy", stringFromJNI()); //调用jni方法
public native String stringFromJNI(); //声明stringFromJNI方法但是在jni中实现
网友评论