Android Studio 调用so库
2017-11-04 本文已影响0人
浮云若飞
前言
前面一篇讲了如何使用ndk-build生成so库,这一篇就写写如何调用。
引入so库


如图,将生成的so库拷贝到libs文件夹下,注意不要单独拷贝so库,armeabi及armeabi-v7a文件夹代表的是so库适用的CPU架构,所以这些文件夹也要一起拷贝出来。
编辑app下的build.gradle文件
在build.gradle下添加:
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
添加后如图:

so库调用:

使用如下代码加载库:
static{
System.loadLibrary("JNITest");
}
public static native int num();// 库中的方法,也是调用的入口
注意几个地方,一、包名要和so库中的包名一样;二、类名也要一致。
我们看看so库的头文件中的函数:
JNIEXPORT jint JNICALL Java_cn_scnu_MainActivity_num
(JNIEnv *, jobject);
函数名为Java_包名类名函数名。所以我们创建的Android工程的包名也要一致,即cn_scnu,同时,负责加载并且提供native方法的类的类名也要相同,即MainActivity,否则调用不成功,提示找不到方法。
注意好这些我们就调用成功了:
