android 实现 JNI NDK 入门例子教程+源码

1、背景

写一个NDK入门教程,方便以后自己忘记了可以再来

2、开发工具以及开发环境

2-1、android studio
2-2、JDK 8
2-3、LLDB
2-4、NDK-Build

支持技术分享,转载或复制,请指出文章来源 此博客作者为Jack__0023

3、开始 (一共9个介绍和操作,文字大多是解释,你也可以直接看图片)

3-1、首先创建一个Android Demo项目(我用Face作为一个Demo项目来演示)
3-2、如果项目中没有jniLibs文件夹,在项目的 build.gradle 文件 的 android {} 编写jniLib属性(如下图)
在这里插入图片描述
3-3、环境配置(配置 javah 和 ndk-build 编译文件工具)
你可以参考这位的这篇 javah和ndk-build配置和解释博客
3-3-a、 javah配置
打开 File -> Settings -> Tools -> External Tools
在这里插入图片描述
点开 + 号开始进行添加 javah,javah配置如下
在这里插入图片描述
3-3-b、ndk-build配置,你可以查看一下你的sdk文件中是否有ndk-build和LLDB的文件(如下图)
在这里插入图片描述
如果不存在的话,可以通过Android studio工具进行配置(如下图),在android sdk的SDK Tools中进行下载即可
在这里插入图片描述
存在 ndk-build和LLDB之后,
再打开 File -> Settings -> Tools -> External Tools,进行ndk-build 配置(配置如下图)
在这里插入图片描述
4、编写jni代码,addNum方法就是JNI方法,代码如图

public class JNITools {
    /**
     * @Description 加载文件
     * @author 姚旭民
     * @date 2018/12/1 14:44
     */
    static{
        System.loadLibrary("NDKLib");
    }

   /**
    * @Description 调用JNI进行相加计算
    * @author 姚旭民
    * @date 2018/12/1 14:45
    *
    * @param num1 参数一
    * @param num2  参数二
    * @return 返回相加结果
  */
    public native int addNum(int num1,int num2);
}

5、将JNITools生成头文件,如下图
你也可以参考这篇 生成头文件博客
在这里插入图片描述
接着你会在 main 文件夹下面找到一个 头文件,我将它移动到了我自定义的jni文件夹中,生成的头文件内容如下(注意Java开头这个修饰是必须的)
在这里插入图片描述
6、生成c/c++ 源文件 NDKLib.cpp,你可以先创建里面可以什么都没有,如图(里面的内容是我后面写上去的)
在这里插入图片描述
7、在同级目录下创建Android.mk,写上面的内容
LOCAL_PATH := $(call my-dir)
Android.mk的属性说明可以参考这篇 博客

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := NDKLib
LOCAL_SRC_FILES := NDKLib.cpp
LOCAL_LDLIBS := -lm -llog
include $(BUILD_SHARED_LIBRARY)

8.、添加C/C++引用到Gradle配置中,如图
在这里插入图片描述
引用之后,使用ndk-build进行编译
在这里插入图片描述
这时候查看 NDKLib.cpp 文件,如果没有内容,那么应该是没有自动关联,可以将我这份代码拷进去

#include <jni.h>
#include "com_yxm_face_ndkdemo_JNITools.h"

JNIEXPORT jint JNICALL Java_com_yxm_face_ndkdemo_JNITools_addNum
        (JNIEnv *env, jobject obj, jint num1, jint num2){
    return num1+num2;
}

9、所有准备工作都做好,开始调用JNI函数进行查看是否成功
在这里插入图片描述
OK,这里就完成JNI的入门例子教程,如果实在看不懂的,可以留邮箱给我,我发个例子给你,因为我这个demo在测试别的,所有有点大,没法上传

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值