当前位置: 首页 > article >正文

4.1 Android NDK 简介

  原生开发套件(NDK)是一套工具,使您能够在 Android 应用中使用 C/C++ 代码,并提供众多平台库,您可以使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。如果您需要实现以下一个或多个目标,那么 NDK 就能派上用场:

  • 进一步提升设备性能,以降低延迟或运行游戏或物理模拟等计算密集型应用。
  • 重复使用 C/C++ 库。

  可以在 Android Studio 中使用 NDK 将 C/C++ 代码编译到原生库中,然后使用 Android Studio 的集成构建系统 Gradle 将原生库打包到 APK 中。Java 代码随后可以通过 JNI 框架调用原生库中的函数。

  Android Studio 编译原生库的默认构建工具是 CMake。由于很多现有项目都使用 ndk-build 构建工具包,因此 Android Studio 也支持 ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。

1 下载 NDK 和工具

  如需为您的应用编译和调试原生代码,您需要以下组件:

  • Android 原生开发套件 (NDK):这套工具使您能在 Android 应用中使用 C 和 C++ 代码。
  • CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
  • LLDB:Android Studio 用于调试原生代码的调试程序。

  在构建应用时,主要涉及到以下组件:

  • 原生共享库:NDK 从 C/C++ 源代码构建这些库或.so文件。
  • 原生静态库:NDK 也可以构建静态库或.a文件,可以将静态库关联到其它库。
  • Java 原生接口(JNI):JNI 是 Java 和 C++ 组件用于相互通信的接口。
  • 应用二进制接口(ABI):ABI 可以非常精确地定义应用的机器代码在运行时应该如何与系统交互。NDK 根据这些定义构建.so文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持。

2 创建或导入原生项目

  Android Studio 设置完成后,可以直接创建支持 C/C++ 的新项目。但如果您要向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:

  1. 创建新的原生源代码文件,并将其添加到 Android Studio 项目中。如果您已经拥有原生代码或想要导入预构建原生库,则可跳过此步骤。
  2. 创建 CMake 构建脚本,指示 CMake 如何将原生源文件构建入库。如果导入和关联预构建库或平台库,您也需要此构建脚本。如果现有的原生库已有 CMakeLists.txt 构建脚本,则可跳过此步骤。
  3. 提供一个指向 CMake 脚本文件的路径,将 Gradle 关联到原生库。Gradle 使用构建脚本将源代码导入您的 Android Studio 项目并将原生库(SO 文件)打包到 APK 中。
  4. 通过点击 Run 图标 从主菜单运行应用 构建并运行应用。Gradle 会以依赖项的形式添加 CMake 或 ndk-build 进程,用于编译和构建原生库并将其随 APK 一起打包。

http://www.kler.cn/a/394479.html

相关文章:

  • JAVA HTTP压缩数据
  • JavaScript中的Set、Map、WeakSet和WeakMap
  • 金仓数据库安装-Kingbase v9-centos
  • 我用Cursor+DeepSeek做了个飞书文档一键同步插件,免费使用!
  • Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
  • springboot481基于springboot社区老人健康信息管理系统(论文+源码)_kaic
  • 开源项目低代码表单设计器FcDesigner扩展自定义的容器组件.例如col
  • 电动工具中的扭矩调节系统:原理与优化
  • [每日一氵] PySpark 的 log GC 部分是什么意思
  • 控制中心应该如何选择控制台
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • WPF Prism中的区域(Region)管理
  • 腾讯云双11最强攻略:如何选购优惠产品,薅最划算的羊毛
  • ssm117网络教学平台的设计与实现+vue(论文+源码)_kaic
  • 安卓aab包的安装教程,附带adb环境的配置
  • 电脑局域网内让其他电脑通过IP访问配置
  • ssh远程连接和nfs共享文件系统
  • 不安全 Rust
  • Linux 抓包工具 --- tcpdump
  • 安全见闻六:通讯协议安全问题剖析
  • Innovus Flexible H-tree and Multi-tap Clock Flow Lab实操系列教程(Day1)
  • jdk8 有哪些新特性?
  • 用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
  • 【数字图像处理+MATLAB】将图像转换为二值图像(Binary Image):使用 imbinarize 函数进行二值化运算(Binarize)
  • 算法--解决熄灯问题
  • libigl 基于射线选择面片