【迅为开发板教程】嵌入式学习之安卓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 代码(实战)