Android Studio 調(diào)用so庫

前言

前面一篇講了如何使用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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容