美文网首页
JNI和NDK编程

JNI和NDK编程

作者: Ryan_Hoo | 来源:发表于2018-07-24 23:22 被阅读0次

Java JNI本意是Java Native Interface,它是为了方便Java调用C、C++等本地代码所封装的一层接口。

NDK是Android所提供的一个工具集合,通过NDK可以在Android上更加方便的通过JNI来访问本地代码。NDK还提供了交叉编译器,开发者简单的修改mk文件就可以生成特定CPU平台的动态库。

1、JNI的开发流程

1)在JAVA中声明native方法

2)编译Java源文件得到class文件,然后通过javah命令导出JNI的头文件。

           进入native方法所在的包下执行    javac  类名.java   ;

           进入java文件夹下(即native的包名外,下一个文件夹就是包名的起始位置)javah 包名.类名

   然后就生成了头文件。

JNIEnv * : 表示一个执行JNI环境的指针,可以通过它来访问JNI提供的接口方法

jobject :表示Java对象的this

JNIEXPORT和JNICALL :它们是JNI中所定义的宏,可以在jni.h这个头文件中查找

下面的宏定义是必须的,它指定extern "C"内部的函数采用C语言的命名风格来编译。否则当JNI采用C++来实现时,由于C和C++编译过程中对函数的命名风格不同,导致JNI在链接是无法根据函数名查找到具体的函数,那么JNI调用就无法完成。

#ifdef __cplusplus

extern "C" {

#endif

3、实现JNI方法

JNI方法指Java中声明的native方法。在Android工程中新建jni文件夹,将通过javah生成的头文件复制到jni文件夹下,然后实现C文件或者C++文件。

4、编译so库并在JAVA中调用

我们来看一下Android.mk的作用,如果我们想要在Android的环境下编译生成自己想要的文件,我们可以生成二进制的可执行文件,可以生成动态库、静态库,这是对于C、C++层来说,那么对于我们得java层来说,Android.mk编译生成jar包或者Android.apk

这些Android.mk的编写都是我们基于Android.mk的基本语法来实现的,如果我们想在Android目录下来编写自己的项目,那我们就必须学会Android.mk的编写。

Android.mk的编写:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := uvccamera              //表示模块的名称

LOCAL_SRC_FILES := test.c      //表示需要参与编译的源文件

include $(BUILD_SHARED_LIBRARY)

Application.mk的编写:

// 市面上常见的架构平台armeabi、x86 和 mips ;all表示编译所有CPU平台的so库

APP_ABI := armeabi

Error: Your project contains C++ files but it is not using a supported native...

解决:https://blog.csdn.net/lanuage/article/details/53072303

在jni文件下用ndk-build命令生成so库 ,并在Java代码中加载 模块的名称 即可调用本地方法了。

相关文章

  • 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...

  • 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...

  • (十四)JNI和NDK的编程

    JNI是Java Native Interface(JAVA本地接口)的缩写,为了方便Java调用C、C++等本地...

网友评论

      本文标题:JNI和NDK编程

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