0%

Android NDK开发-JNIDemo

前言

最近在看四哥的小黄书,在学习Android NDK开发的部分时,发现由于时间过于久远,四哥在小黄书中讲述的NDK开发部分已不再适用于我的Android Studio版本,于是有了这篇博客用于记录我的NDK学习过程。

开发环境及工具

  • Android Studio 3.2
  • SDK
  • JDK1.8
  • 互联网

准备

在使用Android Studio(以下简称AS)开发的伊始,我们需要首先安装支持NDK开发的工具,在AS中使用快捷键Ctrl+Shift+S进入Settings页面,并搜索Android SDK,选择SDK Tools,并勾选LLDB,CMake,NDK点击OK进行安装,图示如下:

ZDking.png

0x01 偷懒式JNI开发

在新建项目选择C++ Support时,我根据网上说的找单选框Support C++,但是我的AS在新建项目时是没有这个这个单选框的,在经过一番寻找后,最终找到了解决方案,如下图所示:

ZDkFBQ.png

在Configure界面,为这个项目命名,这里叫做JNIDemo,点击Next之后,在选择C++ Standard时,选择默认选项

ZDkS9P.png

这就完成了最开始的最简单的一个NDK的开发,进入项目页面,可以看到项目结构如下图所示:

ZDkCjS.png

可以看到与一般项目不同的在于多了cpp文件夹,并多了一个用于CMake链接java和C++的文本配置文件,其具体内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake_minimum_required(VERSION 3.4.1)

add_library( # 最终native文件名
native-lib
# native文件配置SHARED /STATIC
SHARED
# C++文件位置
native-lib.cpp )


find_library( log-lib
log )

target_link_libraries( native-lib
${log-lib} )

这个演示的Demo实际上只是用于在页面中打印一行Hello from C++.

为了进一步了解过程,我又在自己已有不支持C++的项目中添加C++ 支持。

0x02 运动型JNI开发

首先,在原项目中需要首先建立一个cpp文件夹,选择main文件夹右击New->Directory,建立一个用于存放c++文件的文件夹,然后右击cpp文件,新建一个C++文件,具体如下图:

ZDkp1f.png

而后,我们需要创建一个CMake构建脚本,用于链接C++文件和java文件,其名称必须为CMakeLists.txt,在构建脚本中我们至少需要添加cmake_minimum_required()和 add_library()命令,来指明cmake版本以及链接的C++的文件位置和其他配置。这里我是直接拷贝的上面的CMakeLists.txt的内容。

再之后,我们将C++的内容与Java文件链接起来,这时需选择Build System为CMake并指明CMakeLists.txt的路径

ZDk9c8.png

ZDFhkR.png

点击OK后,AS会为你完成配置。

另外在调用C++中函数时,用户需要在调用函数的类中添加,一行对于native函数的引用,这里以我用的stringFromJNI函数为例

1
public native String stringFromJNI();

并且在类中需要添加一个对C++文件的显式加载

1
2
3
static {
System.loadLibrary("native-lib");
}

这里的native-lib指的是C++文件的名称。

至此,完成了初步的NDK开发过程。

本人小白,文章如有不足,敬请指摘,轻喷。