博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 实现 JNI NDK 入门例子教程+源码
阅读量:7011 次
发布时间:2019-06-28

本文共 1925 字,大约阅读时间需要 6 分钟。

  hot3.png

一、背景

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

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

1、android studio

2、JDK 8

3、LLDB

4、NDK-Build

支持技术分享,转载或复制,请指出文章来源

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

1、首先创建一个Android Demo项目(我用Face作为一个Demo项目来演示)

2、如果项目中没有jniLibs文件夹,在项目的 build.gradle 文件 的 android {} 编写jniLib属性(如下图) 在这里插入图片描述

3、环境配置(配置 javah 和 ndk-build 编译文件工具)

你可以参考这位的这篇

a、 javah配置

打开 File -> Settings -> Tools -> External Tools

在这里插入图片描述

点开 + 号开始进行添加 javah,javah配置如下

在这里插入图片描述

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](https://my.oschina.net/arthor) 姚旭民     * [@date](https://my.oschina.net/u/2504391) 2018/12/1 14:44     */    static{        System.loadLibrary("NDKLib");    }   /**    * @Description 调用JNI进行相加计算    * [@author](https://my.oschina.net/arthor) 姚旭民    * @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的属性说明可以参考这篇

include $(CLEAR_VARS)LOCAL_MODULE    := NDKLibLOCAL_SRC_FILES := NDKLib.cppLOCAL_LDLIBS := -lm -lloginclude $(BUILD_SHARED_LIBRARY)

8.、添加C/C++引用到Gradle配置中,如图

在这里插入图片描述

引用之后,使用ndk-build进行编译

在这里插入图片描述

这时候查看 NDKLib.cpp 文件,如果没有内容,那么应该是没有自动关联,可以将我这份代码拷进去

#include 
#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在测试别的,所有有点大,没法上传

转载于:https://my.oschina.net/grkj/blog/2965710

你可能感兴趣的文章
OpenJudge/Poj 1163 The Triangle
查看>>
POJ 3130 半平面交+模版改进
查看>>
Python基础二
查看>>
AndroidStudio -- AndroidStuido中找不到cache.properties文件
查看>>
nginx 无法访问root权限的文件内容
查看>>
进程和线程有什么区别?
查看>>
关于text-align无法居中的问题
查看>>
Here We Go(relians) Again
查看>>
Signal函数
查看>>
[Errno 14] PYCURL ERROR 7 - "couldn't connect to host"
查看>>
chrono
查看>>
hdu2586 lca模板(在线路径倍增)
查看>>
AscII表
查看>>
BASE64图片转字符串
查看>>
springboot-国际化
查看>>
C11中替代gets()的函数
查看>>
[转]水晶报表自动补空行及格线(无分组版)
查看>>
PHP里用户密码的回复和管理
查看>>
jqprint导入jqgrid表格时,内容溢出的原因以及解决方法
查看>>
IOS self.使用
查看>>