【迅为开发板教程】嵌入式学习之安卓JNI开发教程(一)

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

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

 

 

B站免费观看同步视频教程:

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

 

学习内容:

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

2.  分析jni例子并仿写

3.  使用编译好的so

 

 

 

.JNI 介绍

1 什么是 JNI

JNI 的全称是 Java Native Interface,即 Java 本地接口,用一句话来说就是 JNI 是属于 Java 的,尽管

我们是在安卓上使用,但是和安卓没有直接关系。我们只是通过 JNI 来在 Java 代码里面调用 C 或者 C++

的代码。如下图所示:

通过上面的图我们可以发现 java 不仅可以通过 jni 来调用 c/c++,反过来 c/c++也可以来调用 java 的一

些程序,所以,JNI java c/c++有了交互的功能。

如果大家看过我们的 QT 视频,那么这个 JNI 就有点类似于 QT 里面的 C C++混合编程。既然我们

可以通过 JNI Java 代码里面调用 C 或者 C++,那么我们就可以通过安卓应用来控制底层硬件了,比如

说打开 LED,关闭 LED 的操作。

 

 

2 为什么要学习 JNI?

我们主要是做嵌入式开发,但是现在随着安卓工控和界面越来越来多,我们和安卓打的交道越来越

多,几年前更是安卓系统开发人员一将难求,虽然说我们嵌入式开发人员并不需要去写上层的应用,比

如手机 APP 等,但是我们要给写安卓上层应用的工程师提供相应的接口。那么我们就用到了 JNI,我们

要生成相应的库提供给上次开发人员调用。所以我们要学。

 

3 JNI 环境安装

因为 JNI 是属于 java 的,我们需要先在电脑上安装 java 环境。Java 的版本需要大于 1.1,因为 1.1

以后才支持 JNI

 

 

4 如何生成 so 库?

so 使 CMake CMake

CMakeList.txt gradle 来使用。第二种是使用 NDK 自带的脚本工具 ndk-build 配合 Android.mk 来使用。

这里我只介绍第一种方法,使用 ndk-build 的方法现在不是太常用了。

 

 

 

JNI 开发

2.1 使用 CMake 编译工具来生成 so

1.

下载 CMake 编译工具

可以通过 AndroidStudio->SDK->SDK Tools->-CMake 来下载。如果在安装 AndroidStudio 的时候已经安装

了,则不必再次安装,如下图所示:

 

 

2. 创建一个 Native c++项目

打开 AndroidStudio,选择新建一个项目,如下图所示:

 

 

 

然后选择 Native c++,并点击下一步,如下图所示:

 

 

 

这里我们把工程名字设置成 JniTest,保存路径设置成 G:\adnroid\PRO\JNI(大家依据自己的电脑选择路径即可,路径不要有中文),语言设置为 Java,其他保持不变,然后点击下一步。如下图所示:

 

C++标准这里我们选择 C++11,然后点击下一步,如下图所示:

 

稍等片刻,编译完成如下图所示:

 

 

 

我们新创建的这个工程会给我们自动创建一个 jni 的例子,我们来一起分析下这个例子,然后在来仿写

我们自己的 jni,先学会爬,然后在学会跑,我们打开 MainActivity,如下图所示:

 

在这个文件里面我们定义了一个 stringFromJNI()函数,并且我们调用了 native-lib 库,如下图所示:

 

然后我们打开 src/main/cpp/native-lib.cpp 这个 cpp 文件,native-lib 就是这个文件编译得到的,如下图所

示:

 

 

 

 

然后之前我们已经提到了,使用 CMake 编译 so 库,我们需要配合 CMakeList.txt gradle 来使用,那我

我们来看一下我们创建的这个工程有没有这俩个文件,如下图所示:

 

那我们编译生成的 so 库文件是在哪里呢?我们点击一下编译,如下图所示:

 

 

 

 

然后我们切换到 project,进到 G:\adnroid\PRO\JNI\app\build\intermediates\cmake\debug\obj 下面,就可以看到我们生成的 so 库了,那么这个库你就可以给别人来使用了,如下图所示:

 

 

2.2 分析例子的 JNI 代码

2.3 仿写 JNI 代码(实战)

 

posted on 2020-09-01 13:32  月亮_2017  阅读(808)  评论(0编辑  收藏  举报