《Android开发艺术探索》第14章 JNI和NDK编程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值