在Android Studio中进行JNI编程

简介: 在Android Studio中进行JNI编程

 本文主要讲在Android Studio中进行JNI编程的步骤,不涉及编码及在代码中声明本地源文件,如有这方面需要,请自行查找。

 想过自己想要的生活,没有捷径,即便是努力了没有收获时,也不能放弃自己,只要每天在变得更好的路上,你就能看见更好的风景。

开始前的准备

 使用JNI时,你需要下载NDK和工具,具体下载的方法和需要的工具,你可以移步这里“NDK和工具下载”

在Android Studio中使用C/C++的方式

直接创建支持C/C++的新项目

 创建支持原生代码的项目与创建任何其他 Android Studio 项目类似,不过前者还需要额外几个步骤:

  1. 在向导的 Configure your new project 部分,选中 Include C++ Support 复选框。
  2. 点击 Next。
  3. 正常填写所有其他字段并完成向导接下来的几个部分。
  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。

5.点击 Finish。

 具体内容请移步这里直接创建支持C/C++的新项目

注:需要使用 Android Studio 2.2 或更高版本与 Android Plugin for Gradle 版本 2.2.0 或更高版本

向现有项目添加 C/C++ 代码

创建新的原生源文件

 要在应用模块的主源代码集中创建一个包含新建原生源文件的 cpp/ 目录,请按以下步骤操作:

1.从 IDE 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图。

2.导航到您的模块 > src,右键点击 main 目录,然后选择 New > Directory。

3.为目录输入一个名称(例如 cpp)并点击 OK。

4.右键点击您刚刚创建的目录,然后选择 New > C/C++ Source File。

5.为您的源文件输入一个名称,例如 native-lib。

6.从 Type 下拉菜单中,为您的源文件选择文件扩展名,例如 .cpp。

  • 点击 Edit File Types ,您可以向下拉菜单中添加其他文件类型,例如 .cxx 或 .hxx。在弹出的 C/C++ 对话框中,从 Source Extension 和 Header Extension 下拉菜单中选择另一个文件扩展名,然后点击 OK。

7.如果您还希望创建一个标头文件,请选中 Create an associated header 复选框。

8.点击 OK。

创建 CMake 构建脚本

 在Android Studio中默认使用CMake 构建脚本,如果您的项目使用 ndk-build,则不需要创建 CMake 构建脚本。提供一个指向您的 Android.mk 文件的路径,将 Gradle 关联到您的原生库。

 如果您的原生源文件还没有 CMake 构建脚本,则您需要自行创建一个并包含适当的 CMake 命令。CMake 构建脚本是一个纯文本文件,您必须将其命名为 CMakeLists.txt。

1.从 IDE 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图。

2.右键点击您的模块的根目录并选择 New > File。

注:您可以在所需的任意位置创建构建脚本。不过,在配置构建脚本时,原生源文件和库的路径将与构建脚本的位置相关。

3.输入“CMakeLists.txt”作为文件名并点击 OK。

现在,您可以添加 CMake 命令,对您的构建脚本进行配置。要指示 CMake 从原生源代码创建一个原生库,请将cmake_ minimum_ required() 和 add_library() 命令添加到您的构建脚本中:

cmake_minimum_required(VERSION 3.4.1)
add_library( 
         # 要生成动态库的名称,可以自己设定
         native-lib 
         # 设置这个库为公开的
         SHARED
         # 关联源码的路径
         src/main/cpp/native-lib.cpp )

使用 add_library() 向您的 CMake 构建脚本添加源文件或库时,Android Studio 还会在您同步项目后在 Project 视图下显示关联的标头文件。不过,为了确保 CMake 可以在编译时定位您的标头文件,您需要将 include_directories() 命令添加到 CMake 构建脚本中并指定标头的路径:

add_library(...)
# Specifies a path to native header files.
include_directories(src/main/cpp/include/)

 CMake 使用以下规范来为库文件命名:

 lib*库名称*.so

 例如,如果您在构建脚本中指定“native-lib”作为共享库的名称,CMake 将创建一个名称为 libnative-lib.so 的文件。不过,在 Java 代码中加载此库时,请使用您在 CMake 构建脚本中指定的名称:

static {
    System.loadLibrary(“native-lib”);
}

将 Gradle 关联到您的原生库

 要将 Gradle 关联到您的原生库,您需要提供一个指向 CMake 或 ndk-build 脚本文件的路径。在您构建应用时,Gradle 会以依赖项的形式运行 CMake 或 ndk-build,并将共享的库封装到您的 APK 中。Gradle 还使用构建脚本来了解要将哪些文件添加到您的 Android Studio 项目中,以便您可以从 Project 窗口访问这些文件。如果您的原生源文件没有构建脚本,则需要先创建 CMake 构建脚本,然后再继续。

 将 Gradle 关联到原生项目后,Android Studio 会更新 Project 窗格以在 cpp 组中显示您的源文件和原生库,在 External Build Files 组中显示您的外部构建脚本。

注:更改 Gradle 配置时,请确保通过点击工具栏中的 Sync Project 应用更改。此外,如果在将 CMake 或 ndk-build 脚本文件关联到 Gradle 后再对其进行更改,您应当从菜单栏中选择 Build > Refresh Linked C++ Projects,将 Android Studio 与您的更改同步。

 您可以使用 Android Studio UI 将 Gradle 关联到外部 CMake 或 ndk-build 项目:

1.从 IDE 左侧打开 Project 窗格并选择 Android 视图。

2.右键点击您想要关联到原生库的模块(例如 app 模块),并从菜单中选择 Link C++ Project with Gradle。您应看到一个如图 4 所示的对话框。

3.从下拉菜单中,选择 CMake 或 ndk-build。

  • 如果您选择 CMake,请使用 Project Path 旁的字段为您的外部 CMake 项目指定 CMakeLists.txt 脚本文件。
  • 如果您选择 ndk-build,请使用 Project Path 旁的字段为您的外部 ndk-build 项目指定 Android.mk 脚本文件。如果 Application.mk 文件与您的 Android.mk 文件位于相同目录下,Android Studio 也会包含此文件。

图 使用 Android Studio 对话框关联外部 C++ 项目。

4.点击 OK。

总结

 按上述步骤进行到这里,你已经可以使用Android Studio编写JNI程序了,总结步骤如下:

  1. 创建新的源文件。
  2. 创建 CMake 构建脚本。
  3. 将 Gradle 关联到您的原生库。
  4. 不要忘记在java文件中载入动态库文件。
static {
System.loadLibrary(“native-lib”);
}

后记

 由于本人技术有限,难免有一些错误和遗漏的地方,欢迎大家指正。


相关文章
|
19天前
|
XML 存储 数据库
如何使用Android Studio创建一个基本的音乐播放器应用
如何使用Android Studio创建一个基本的音乐播放器应用
35 0
|
10天前
|
存储 Linux 开发工具
Linux手动升级替换Android Studio
【6月更文挑战第22天】
|
10天前
|
Android开发
Android Studio(2022.3.1)设置阿里云源-新旧版本
Android Studio(2022.3.1)设置阿里云源-新旧版本
49 1
|
14天前
|
XML Java 开发工具
Android Studio开发Android TV
【6月更文挑战第19天】
|
16天前
|
Android开发
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
113 1
|
17天前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
61 2
|
19天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
20天前
|
Java API 开发工具
【Android】安Android Studio环境搭建注意点
【Android】安Android Studio环境搭建注意点
32 1
|
23天前
|
开发工具 Android开发
android studio build异常
android studio build异常
20 3
|
26天前
|
Android开发 Windows
android studio开发时提示 TLS 握手错误解决办法
在Windows环境下遇到TLS协议版本不支持的错误,Gradle构建失败。解决方案是在build.gradle.kts中设置系统属性`https.protocols`为`TLSv1.2`,而非遵循误导信息设置为TLSv1.1。