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

安卓的NDK、ABI、JNI到底是指啥?区别与联系是?

文章目录

  • 概述
  • ABI(Application Binary Interface)
  • abiFilter
  • NDK(Native Development Kit)
  • JNI(Java Native Interface)
  • 它们之间的联系

概述

  • 只是简单介绍,可能描述不够精准,但可以帮助你快速理解大概。

ABI(Application Binary Interface)

  • 定义了 CPU 架构的二进制接口规范(如 armeabi-v7a、arm64-v8a)【ABI是接口规范】。
  • 关于.so,可以理解为接口规范的实现如下:
    • .so 文件是针对特定 ABI 编译的,不同 ABI 需要不同的 .so 文件。
    • .so可以简单理解为是一种c/c++编写的库(动态链接库,类似windows的.dll文件)

abiFilter

  • 用于在 Gradle 配置中指定支持的 ABI 架构,从而只打包对应的 .so 文件,减少 APK/AAB 体积。
  • 题外话:APK和AAB都是包,只不过AAB是上谷歌商店用到。

NDK(Native Development Kit)

  • 由 Google 提供的工具集,允许开发者使用 C/C++ 等原生语言为 Android 平台开发高性能的代码模块。
  • 通过 NDK 编译 C/C++ 代码可以生成 .so 文件(动态链接库)。
  • 注意,不是一定要编写C/C++代码才用到NDK,项目有.so文件就可能需要NDK的,比如动态加载、JNI交互、构建工具链都需要NDK的支持。

JNI(Java Native Interface)

  • 简单来说是 Java/Kotlin 与本地代码(C/C++)交互的桥梁。
  • 具体是 Java 提供的一种机制,允许 Java 代码调用本地(如 C/C++)代码,或本地代码调用 Java 代码,常用于性能优化或与底层系统交互。
  • 通过 System.loadLibrary(“example”) 在运行时加载 .so 文件,并调用其中的本地方法。

它们之间的联系

  1. 用 NDK 编译 C/C++ 代码生成 .so 文件(针对特定 ABI)。
  2. 然后通过 abiFilter 配置需要支持的 ABI 架构。
  3. 最后在运行时通过 JNI 加载和使用 .so 文件。
  4. 实例如下:
//在Module的  build.gradle  文件中添加依赖和属性配置
android {defaultConfig {ndk {// 设置支持的SO库架构abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'}}
}dependencies {implementation 'xxx'
}
http://www.dtcms.com/a/315152.html

相关文章:

  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • Ollama入门实战
  • ES集群规划与调优
  • Matlab(1)
  • 蓝桥杯----AT24C02
  • 【Git】怎么将https://coding.net的仓库迁移至https://cnb.cool/
  • 拉格朗日松弛算法求解VRP(Vehicle Routing Problem)车辆路径问题和简单示例
  • Linux的进程管理与监控和任务工具crontab的使用
  • 臭氧、颗粒物和雾霾天气过程的大气污染物计算 CAMx模型
  • 用思维框架拆解知识,开启高效学习之旅
  • 【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal
  • RabbitMQ--介绍
  • 498. 对角线遍历
  • JUCE VST AI 开源
  • 2025最好的Dify入门到精通教程(上)
  • 微服务的编程测评系统10-竞赛删除发布-用户管理-登录注册
  • 县级融媒体中心备份与恢复策略(精简版3-2-1架构)
  • 【网络安全】不安全的反序列化漏洞
  • P1550 [USACO08OCT] Watering Hole G
  • 【达梦MPP(带主备)集群搭建】
  • python包管理器uv踩坑
  • Golang中的`io.Copy()`使用场景
  • Java 的 APT(Annotation Processing Tool)机制详解
  • 【MyBatis-Plus笔记】MyBatis-Plus详解
  • JuiceFS on Windows: 首个 Beta 版的探索与优化之路
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 【笔记】ROS1|3 Turtlebot3汉堡Burger建SLAM地图并导航【旧文转载】
  • 数学 理论
  • 基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】
  • Fastapi文件上传那些事?