[迅为开发板教程]嵌入式学习之安卓JNI开发教程(二)

转自迅为开发板安卓JNI开发指南

硬件平台:迅为iTOP-412开发板

 

 

B站搜索:北京迅为,免费观看同步视频教程:

https://www.bilibili.com/video/BV18v411i7Dx

 

学习内容:

1.  jni简介和Android Studio环境搭建

2.  分析jni例子并仿写

3.  使用编译好的so

 

 

分析例子的 JNI 代码

上一节我们了解我们创建的这个工程这样的一个 JNI 架构,那么这一节我们来编译一个自己的 so 库, 要编译自己的 so 库,我们就要先来写一个 JNI 的代码,所以我们先来一起分析下他给我们的这个例子的代 码,如下图所示:

 

 

避免编译器按照 C++的方法来编译 C 函数

extern "C"

关键字 JNIEXPORT 的作用是表示这个函数可以被其他的函数调用,这个有点类似于 C++ PUBLIC 修饰符JNIEXPORT北京迅为电子有限公司

www.topeetboard.com

10

关键字 JNICALL 为空,没有含义 JNICALL 关键字定义如下

 

 

关键字 jstring 表示的是字符串类型,与之类似的还有 jint,jchar,与之 c 语言对应的类型就是 int char jstringJava_com_example_jnitest_MainActivity_stringFromJNI 是函数名的名称,这个我们不能随便定义,我们使 用的是静态注册,所以他有格式要求,与之对应的还有动态注册,这里我们不做介绍。

格式:Java _包名 _ 类名_Java 需要调用的方法名

按照这个格式我们可以知道,包名为 com_example_jnitest,也就是 MainActivity 所在的包名,如下图所示:

 

 

类名为 MainActivity,也就是定义 native 函数的类,也就是 MainActivity,如下图所示:

 

 

Java 需要调用的方法名为 stringFromJNI,也就是我们定义的 public native String stringFromJNI(),如下图所示:

 

 

参数 JNIEnv* env,与 java 进行交互的相关的函数 JNIEnv* env 定义如下:

 

 

参数 jobject,代表 native 函数的 java 类的实例。

定义了一个字符串 Hello from C++,并返回这个字符串

std::string hello = "Hello from C++";

return env->NewStringUTF(hello.c_str());

 

 

posted on 2020-09-02 14:04  月亮_2017  阅读(310)  评论(0编辑  收藏  举报