Android NDK开发之生成动态库.so文件

配置好NDK开发的基本环境,安装好NDK

在Android  studio的工具栏点击SDK Manager的图标,去安装NDK。

Android NDK开发之生成动态库.so文件

接下来就是介绍下如何生成.so文件了,用一个例子来说明。

具体步骤:

1、新建一个Project,例子里是KL,在KL里新建一个Module,如本例中的Demo,新建一个Java文件ZjrT.java,如下图所示:

Android NDK开发之生成动态库.so文件

ZjrT中的static代码块中加载了一个library:zjr,libname的名字可以随意取,这个也就是最后生成的so文件的名字,系统会在前面默认加上lib,如本例中,最后生成的是libzjr.so.

2、生成jni头文件,在这我们可以配置一个宏命令,方便之后使用

File--->Setting--->Tools--->External Tools,点击“+”,弹出Edit Tool,按下图所示进行配置

Android NDK开发之生成动态库.so文件

Tools Setting:

Programme:javah

Arguments:-v -jni -d $ModuleFileDir$/src/main/jni $FileClass$

Working directory:$SourcepathEntry$

在ZjrT.java文件如下操作;

Android NDK开发之生成动态库.so文件

在Module中会自动生成jni文件夹,下面自动生成了一个kl_sensor_ZjrT.h文件。

3、在jni目录下新建.cpp、.mk文件

sou.cpp代码:

#include "jni.h"
#include "kl_sensor_ZjrT.h"

JNIEXPORT jstring JNICALL Java_kl_sensor_ZjrT_getN
  (JNIEnv * env, jclass jz){
    return env->NewStringUTF("ceshi");
}

Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := zjr
LOCAL_SRC_FILES := sou.cpp
include $(BUILD_SHARED_LIBRARY)

Application文件:

APP_ABI := all
APP_PLATFORM := android-15

APP_ABI := all 可以用下面替换:

APP_ABI := armeabi armeabi-v7a x86 arm64-v8a mips mips64 x86_64

可选择性生成指令集下的so文件。

4、在Terminal中进入到jni,然后输入ndk-build,按回车Enter,即可

Android NDK开发之生成动态库.so文件

编译完成后,在Module中生成libs文件夹,包含各个指令集下的libzjr.so文件。