前言
前面一篇講了如何使用ndk-build生成so庫,這一篇就寫寫如何調(diào)用。
引入so庫
2017-11-04 15-58-03屏幕截圖.png
2017-11-04 15-58-09屏幕截圖.png
如圖,將生成的so庫拷貝到libs文件夾下,注意不要單獨拷貝so庫,armeabi及armeabi-v7a文件夾代表的是so庫適用的CPU架構(gòu),所以這些文件夾也要一起拷貝出來。
編輯app下的build.gradle文件
在build.gradle下添加:
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
添加后如圖:
2017-11-04 16-02-01屏幕截圖.png
so庫調(diào)用:
2017-11-04 16-03-55屏幕截圖.png
使用如下代碼加載庫:
static{
System.loadLibrary("JNITest");
}
public static native int num();// 庫中的方法,也是調(diào)用的入口
注意幾個地方,一、包名要和so庫中的包名一樣;二、類名也要一致。
我們看看so庫的頭文件中的函數(shù):
JNIEXPORT jint JNICALL Java_cn_scnu_MainActivity_num
(JNIEnv *, jobject);
函數(shù)名為Java_包名類名函數(shù)名。所以我們創(chuàng)建的Android工程的包名也要一致,即cn_scnu,同時,負責加載并且提供native方法的類的類名也要相同,即MainActivity,否則調(diào)用不成功,提示找不到方法。
注意好這些我們就調(diào)用成功了:
1019079315.jpg