Android全集Android开发

第14章 JNI和NDK编程

2019-06-14  本文已影响0人  littlefogcat

因为书中和网上搜到的方法都有些过时了,这里简单记录一下使用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());
上一篇 下一篇

猜你喜欢

热点阅读