Android JNI开发

AndroidStudio进行JNI开发:

第一种方法使用Android.mk以及Application.mk生成不同内核下的.文件。

1.要将AndroidStudio配置支持ndk开发配置的方法如下:

    Android JNI开发

只要在Android NDK location这个位置配置上ndk的路径,之后就可以使用AndroidStudio进行ndk开发.

JNI开发的步骤:

1、将使用的方法进行定义,之后使用javac 对当前定义的java进行编译生成.class文件,之后在使用javah -jni 包名.类名 进行编译生成相应的.h头文件(头文件中包含我们将要在c文件中编写的方法)。

2、在src文件夹下创建jni目录,创建.c文件将生成好的方法名拷贝过来进行方法编写,同时在当前文件夹下创建一个Android.mk文件这个文件中生命的内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE  := hellojni #指定生成的库名 lib库名.so
LOCAL_SRC_FILES := hello_jni.c #指定要编译的C语言源文件 多个空格排开
include $(BUILD_SHARED_LIBRARY) #指定生成库类型(静态库 动态库 独立程序) 动态库

jni目录结构如下:

Android JNI开发

之后在src文件夹下创建一个Application.mk文件这个文件指定的是想要编译生成的.so对应的不同的手机内核有armeabi arm64-v8a x86 mips等等。 如果这个文件是个空的文件那么编译生成.so的时候就是所有能生成的都会生成对应的.so文件。

3.在Android Studio 中的Terminal中使用 ndk-build命令编译生成对应手机内核下的.so文件。生成的文件结构如下:

Android JNI开发

4.之后就需要在AndroidStudio当前项目的src文件下的build.gradle中进行配置相应的.so的引用配置内容如下:

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

之后就可以在对应的类中使用JNI中生命的方法。但是在使用之前需要先调用下面的静态代码块将.so库加载进来。

static{
    System.loadLibrary("hellojni");
}
第二种方法使用CMake生成对应的.so文件