jni:as 进行 JNI / NDK 开发:初步配置及使用

AndroidStudio 进行 JNI / NDK 开发:初步配置及使用-CSDN博客版权声明:

本文为博主原创文章,转载请标明出处。AndroidStudio 进行 JNI / NDK 开发:初步配置及使用-CSDN博客

一、相关名词解释

JNI:java native interface,jni可以实现java和C/C++通信。

java代表java语言,

native代表当前程序运行的本地环境,一般指windows/linux,而这些操作系统都是通过C/C++实现的,所以native通常也指C/C++语言,

interface代表java跟native两者之间的通信接口,

Java Native Interface(Java 本地编程接口),一套编程规范,它提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C/C++)。Java 可以通过 JNI 调用本地的 C/C++ 代码,本地的 C/C++ 代码也可以调用 java 代码。Java 通过 C/C++ 使用本地的代码的一个关键性原因在于 C/C++ 代码的高效性。

NDK:Native Development Kit(本地开发工具)

Native Development Kit(本地开发工具),一系列工具的集合,提供了一系列的工具,帮助开发者快速开发 C/C++,极大地减轻了开发人员的打包工作。这套工具集允许为 Android 使用 C 和 C++ 代码。

CMake

CMake一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果只计划使用 ndk-build,则不需要此组件。

LLDB

LLDB一种调试程序,Android Studio 使用它来调试原生代码。

二:AS 2.2以上    创建支持 C/C++(NDK cMake) 的新项目方式:

 AS2.2之前的传统创建方式:(已淘汰)

jni:as 进行 JNI / NDK 开发:初步配置及使用_第1张图片

 AS2.2之后的ndk cMake创建方式:见 第三条目

三:AS 2.2以上创建支持 C/C++(NDK cMake) 的新项目的流程:

1、环境搭建

jni:as 进行 JNI / NDK 开发:初步配置及使用_第2张图片

在新建项目时勾上Include C++ support 这行:

jni:as 进行 JNI / NDK 开发:初步配置及使用_第3张图片

jni:as 进行 JNI / NDK 开发:初步配置及使用_第4张图片

在向导的 Customize C++ Support 部分,有下列自定义项目可供选择:

C++ Standard:使用下拉列表选择使用哪种 C++ 标准。选择 Toolchain Default 会使用默认的 CMake 设置。

Exceptions Support:如果希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将 -fexceptions 标志添加到模块级 build.gradle文件的 cppFlags中,Gradle 会将其传递到 CMake。
 Runtime Type Information Support:如果希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将 -frtti 标志添加到模块级 build.gradle文件的 cppFlags中,Gradle 会将其传递到 CMake。

 

主要项目结构目录

jni:as 进行 JNI / NDK 开发:初步配置及使用_第5张图片

jni:as 进行 JNI / NDK 开发:初步配置及使用_第6张图片

cpp 文件夹:用于编写 C/C++代码

CMakeLists.txt:CMake 脚本配置文件

jni:as 进行 JNI / NDK 开发:初步配置及使用_第7张图片

配置 build.gradle 文件

jni:as 进行 JNI / NDK 开发:初步配置及使用_第8张图片

jni:as 进行 JNI / NDK 开发:初步配置及使用_第9张图片

要在哪个类运用 JNI ,就得加载相应的动态库

jni:as 进行 JNI / NDK 开发:初步配置及使用_第10张图片

快速生成代码:Alt + Enter

( 我在kotlin类中创建了一个external函数,如何在native-lib.cpp文件里生成对应关联的函数)

    鼠标选中external  fun  getBytes(  bytes:ByteArray):ByteArray ,点击快捷键 Alt+Enter 弹出提示,Create jni function getBytes 就会在native-lib.cpp文件里生成对应的jni 函数

jni:as 进行 JNI / NDK 开发:初步配置及使用_第11张图片

在 native-lib.cpp 中声明后记得在方法名的上面一行添加 extern"C",否则执行后会找不到该方法。 

jni:as 进行 JNI / NDK 开发:初步配置及使用_第12张图片

新建 C/C++ 源代码文件fmf_jni.cpp   fmf_jni2.cpp,要添加到 CMakeLists.txt 文件中

jni:as 进行 JNI / NDK 开发:初步配置及使用_第13张图片

2. jni debug

直接在 .cpp 文件里面加断点 ; debug 运行就好了 ;

 3 修改 so 库名字

第一步,将native-lib. cpp 文件夹下的文件名 修改 为 fmf_jni.cpp

第二步,将此句 System.loadLibrary("native-lib"); 的名字修改 fmf_jni

第三步,将 CMakeLists.txt 文件里面所有 "native-lib" 的字段修改
然后先 Clean Project ,再重新编译一下项目( Ctrl + F9)(点击锤子 不是 Rebuild Project )

jni:as 进行 JNI / NDK 开发:初步配置及使用_第14张图片

jni:as 进行 JNI / NDK 开发:初步配置及使用_第15张图片

jni:as 进行 JNI / NDK 开发:初步配置及使用_第16张图片

4 .导出 so 文件

找到so文件的位置直接导出来 (E:\Android\NdkDemo\myNativeDemo\app\build\intermediates\cmake\freeMinApi23Debug\obj\arm64-v8a\libfmfjni.so)

你的build.gradle 配置ndk配置几个so类型 就打几个so类型库

 

jni:as 进行 JNI / NDK 开发:初步配置及使用_第17张图片

 5 在现有项目中添加 C/C++文件

创建新源文件(.cpp / .c)
参考新建项目的方式在 src/main 路径下创建 cpp 文件夹 ; (也可在其他目录下创建,在第二点会配置这个路径);
在 cpp 文件夹下创建你的 .cpp / .c 源文件 ;


 6.引入第三方 .so文件,要添加到 CMakeLists.txt 文件中

 


 

你可能感兴趣的:(jni&ndk,android)