第14章 JNI和NDK编程

作者: littlefogcat | 来源:发表于2019-06-14 07:42 被阅读0次

因为书中和网上搜到的方法都有些过时了,这里简单记录一下使用Android Studio进行NDK编程的过程。

1. 在SDK Manager中安装NDK工具

打开SDK Manager - SDK Tools,选中NDK,Apply,即开始安装NDK工具。

2. 定义native方法

2.1 生成.h头文件

2.1.1 新建空工程,并在MainActivity同级目录下新建java类JniTest.java。

2.1.2 Build - Make Project,生成class文件;在我的Android Studio版本,这个文件在\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes文件夹中,跟网上的文章不同。

2.1.3 打开Terminal,进入main文件夹下。

2.1.4 在Terminal中键入javah -d jni -classpath ..\..\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes top.littlefogcat.chapter14_jni_ndk.JniTest

此时,main目录下已经生成了jni文件夹,其中就有所需要的.h头文件。

2.2. 新建test.c

在jni目录下新建test.c文件如下:

#include <jni.h>
#include <stdio.h>

#include "top_littlefogcat_chapter14_jni_ndk_JniTest.h"

JNIEXPORT jstring JNICALL Java_top_littlefogcat_chapter14_1jni_1ndk_JniTest_get
    (JNIEnv *env, jclass cls){
        return (*env) -> NewStringUTF(env, "Hello JNI");
}

在这个文件中定义了native方法需要做的事,这里简单返回了一个字符串"Hello JNI"。
至此,native方法已经定义完毕。

3. 新建.mk文件

在jni文件夹下,新建两个.mk文件:

  1. Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := JNITest
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)
  1. Application.mk
APP_ABI := all

4. 生成so库

在Terminal中输入ndk-build,即可生成.so文件。生成的.so文件在main\libs下。注意在这里需要把ndk所在的目录添加到系统的环境变量中。
将生成的文件名修改为libjni_test.so,这个名字可以自定义。

5. 调用native方法

在调用native方法之前,要先使用System.loadLibrary("jni_test");来加载.so文件,一般使用static块来进行加载。这里的jni_test即是第5步中去掉头上的lib和最后的.so剩下的部分。

public class JniTest {

    static {
        System.loadLibrary("jni_test");
    }

    public native static String get();
}

然后,在需要使用的地方调用JniTest.get()即可。

        TextView tv = findViewById(R.id.tv);
        tv.setText(JniTest.get());

相关文章

  • JNI简介

    JNI和NDK? JNI (Java Native Interface)是一套编程接口,用来实现java代码和其他...

  • Android 添加JNI 开发能力

    JNI 与 NDK 区别JNI:JNI是一套编程接口,用来实现Java代码与本地的C/C++代码进行交互;NDK:...

  • JNI调用

    1.NDK 和 JNI介绍 JNI (Java Native Interface)是一套编程接口,用来实现Java...

  • JNI和NDK编程

    Java JNI本意是Java Native Interface,它是为了方便Java调用C、C++等本地代码所封...

  • Android JNI开发之Friso分词功能

    NDK是Google开发的一套开发和编译工具集,用于Android上JNI编程。通过NDK我们可以在Android...

  • 第14章 JNI和NDK编程

    因为书中和网上搜到的方法都有些过时了,这里简单记录一下使用Android Studio进行NDK编程的过程。 1....

  • JNI入门学习总结(MAC OS AndroidStudio)

    1 什么是JNI和NDK? JNI:java本地接口 NDK(Native Development Kit)是Go...

  • JNI和NDK编程(一)

    简介 Java JNI意思是Java Native Interface(Java本地接口),主要为了方便Java调...

  • JNI和NDK编程入门

    本文AndroidStudio版本 3.2.1 JNI开发流程 1. 编写java部分 Java中声明native...

  • JNI和NDK的简单编程

    前言 Java JNI 本意是Java Native Interface(java 本地接口),他是为了方便Jav...

网友评论

    本文标题:第14章 JNI和NDK编程

    本文链接:https://www.haomeiwen.com/subject/oqmyfctx.html