Android Studio 配置 JNI

JNI 是java 语言调用C/C++函数的接口。与JNI相关的开发工具包是NDK。下面记录Android Studio 里用 java代码调用 JNI的基本过程。当前环境:

Android Studio:3.1.2.

NDK:20.0.5

准备

下载NDK:

###1.创建Java类

定义一个工具类,里面定义了native方法:

1
2
3
4
5
6
7
8
9
package cn.qiracle.jnidemo.jni;

public class JniUtils {

static {
System.loadLibrary("JniLib");
}
public static native String getJniString();
}

2.创建JNI文件夹

在main文件夹下创建jni文件夹:

3.生成头文件

两种方式:

1.通过命令行

javac JniUtils.java 编译生成 JniUtils.class文件。然后回退到包外目录javah -jni cn.qiracle.jnidemo.jni.JniUtils。将生成的.h文件移动到main下的jni目录下。

2.配置外部工具

点击File - Setting - Tools - External Tools 打开外部工具配置页,点击 + 新建一个工具。

Program: $JDKPath$\bin\javah.exe

Arguments: -classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$

Working directory: $ModuleFileDir$\src\main\Java

点击 OK 保存后就新建了一个工具。此时我们右击 JniUtils.java,在菜单中选择 External Tools - javah 就可以快速生成头文件并放到 jni 目录。

4.编写C代码

在jni目录下新建一个cn_qiracle_jnidemo_jni_JniUtils.cpp文件。内容如下:

1
2
3
4
5
6
7
#include "cn_qiracle_jnidemo_jni_JniUtils.h"

JNIEXPORT jstring JNICALL Java_cn_qiracle_jnidemo_jni_JniUtils_getJniString
(JNIEnv *env,jclass jobj) {

//new 一个字符串,返回Hello World
return (*env).NewStringUTF("Hello jni");
}

这里输出 hello jni

5.创建mk文件

mk 文件用于告诉 ndk-build 该如何编译 c 源码。详情见官方指南

在jni目录下创建Android.mk:

1
2
3
4
5
6
7
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniLib
LOCAL_SRC_FILES =: cn_qiracle_jnidemo_jni_JniUtils.cpp
include $(BUILD_SHARED_LIBRARY)

创建 Application.mk

1
2
APP_MODULES := JniLib
APP_ABI := all

6.gradle配置

在 module 的 build.gradle 里,amndroid.defaultConfig 下加入下面配置:

1
2
3
4
5
6
7
ndk {
moduleName "JniLib"
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}

6.编译

这里我们配置使用外部工具:

  • Program: D:\SDK\ndk-bundle\build\ndk-build.cmd (注意这里是ndk-build路径)
  • Working directory: $ProjectFileDir$\app\src\main

任意找个第地方右击,选择 External Tools - ndk-build 即可编译 c 源码。成功后可以看见创建了 libs 目录,里面包含了不同平台下的 so 文件。

7.验证

在MainActivity.java里调用native方法:

1
Toast.makeText(this,JniUtils.getJniString(),Toast.LENGTH_SHORT).show();

运行结果:

参考:

https://www.jianshu.com/p/09ff3300f453

文章目录
  1. 1. 准备
  2. 2. 2.创建JNI文件夹
  3. 3. 3.生成头文件
  4. 4. 4.编写C代码
  5. 5. 5.创建mk文件
  6. 6. 6.gradle配置
  7. 7. 6.编译
  8. 8. 7.验证
|