Android Studio 调用so库

前言

前面一篇讲了如何使用ndk-build生成so库,这一篇就写写如何调用。

引入so库

Android Studio 调用so库_第1张图片
2017-11-04 15-58-03屏幕截图.png
Android Studio 调用so库_第2张图片
2017-11-04 15-58-09屏幕截图.png

如图,将生成的so库拷贝到libs文件夹下,注意不要单独拷贝so库,armeabi及armeabi-v7a文件夹代表的是so库适用的CPU架构,所以这些文件夹也要一起拷贝出来。

编辑app下的build.gradle文件

在build.gradle下添加:

    sourceSets{
        main{
            jniLibs.srcDirs = ['libs']
        }
    }

添加后如图:


Android Studio 调用so库_第3张图片
2017-11-04 16-02-01屏幕截图.png

so库调用:

Android Studio 调用so库_第4张图片
2017-11-04 16-03-55屏幕截图.png

使用如下代码加载库:

    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,否则调用不成功,提示找不到方法。

注意好这些我们就调用成功了:


Android Studio 调用so库_第5张图片
1019079315.jpg

你可能感兴趣的:(Android Studio 调用so库)