JNI与NDK开发(一)——项目初建

Android Studio NDK开发案例一 JNI开发入门         最近在做Android的项目,用到了JNI,现将NDK的开发流程和方法整理出来,希望能够让刚接触的小伙伴们少走一些弯路。 NDK         Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java一起打包成apk。 JNI         Java Native In... 阅读详情

随着工作时间越久,接触关于Android系统越深入(日常开源项目使用,及解系统BUG),JNI与NDK开发出现的频率越来越多。目前,越来越多公司对于代码执行效率、核心代码的保密性要求日益提高,加之各种C 、C++开源项目的不断接入。使得Android开发中,对于JNI的使用甚至NDK的开发,越来越重视。
虽然使用JNI已经很久了,NDK也小范围的进行过实际项目的开发。但,自己的笔记中,这些方面的知识记得都比较零散。自己对这些知识从生疏到熟练,这个过程花费了很长时间。现在回顾一下,其实如果系统性的进行了梳理和着重强化练习,这个过程其实可以大幅缩短。想想还是认真梳理一下吧,知识先是越学越多,再是越学越少。

首先AndroidStudio工具需要配置NDK开发环境,我用的AndroidStudio 3.2 版本。过程非常简单,勾选以下红框的选项,联网进行自动下载,沿途一律同意!

当然,如果不进这些配置,直接创建JNI项目也是可以的,到时候会有多种报错。你只需要,根据报错提示,安装相应的工具或插件即可。但是,我还是建议进行预先配置,这是个习惯或做事思路的问题。古语有云:未雨绸缪 欲速则不达
在这里插入图片描述
以上图:
CMake 用于产生编译脚本CMakeLists.txt,其本身并没有真正参与代码编译。AndroidStudio中真正进行编译的是Glide工具中的插件nijia,这里我们不用关心;
LLDB 用于进行调试;
NDK 真正进行NDK开发的工具集;

使用AndroidStudio创建一个JNI项目

1、勾选 Include C++ support
创建JNI程序
2、其他步骤与创建普通Android项目相同。
由于步骤1,勾选了 Include C++ support,才会出现下图所示界面。

在这里插入图片描述
图①:C++ Standard: 选择C++库
Toolchain Default: 默认 CMake 设置
C++ 11:支持C++11特性
C++ 14:支持C++14特性

图②:Exceptions Support(-fexceptions):
如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。

图③:Runtime Type Information Support(-frtti):
如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。
在这里插入图片描述
经过以上设置,就可以创建一个JNI的Hello World项目。

下图为这个JNI项目的目录结构,和基本代码结构:
在这里插入图片描述
在这里插入图片描述
文件夹 main — cpp: 这里的cpp文件夹,在以前的AndroidStudio 和 Eclipse版本中,命名为JNI。估计Google觉得,cpp文件夹(原JNI文件)中书写的是C/C++代码,所以为了好理解不误会,就将其改名字了。

JNI主要包含3部分代码,分别对应图中的 ①、②、③。
①:将要使用的library库进行引用。所有代码第一步都是要引用或关联代码库,然后才能代用库中的方法或属性;
②:在Java代码中定义 native方法;
③:在C代码中,对应创建(JNI代码第一种书写方法)或映射关联(JNI代码的第二种书写方法),Java代码中的native方法。
完成以上三步,就可以在Java代码中调用这个native方法,以便让C代码中的函数参与运算或业务处理。
在这里插入图片描述
以上内容是JNI与NDK开发环境的搭建(随着工具的更新,这个很简单了,以前的还是有点复杂)。并且,介绍了一下JNI的目录与代码构成。下一篇预计讲解一下,JNI的语法使用和注意事项。希望到时候工作不忙!

Android Studio中NDK与JNI开发入门指南 Java Native Interface (JNI) 是一个编程框架,允许Java代码和其他语言写的代码(主要是C和C++)进行交互。其定义了一个标准的编程接口,使得Java虚拟机(JVM)中的Java代码能够调用本地应用程序接口(API)中的本地方法(用C、C++或其他语言实现的方法),以及反过来实现本地方法调用Java对象和其方法。JNI不仅提供了一种机制来调用本地方法,同时也需要一种方式来处理不同数据类型之间的转换。 阅读详情

相关推荐

深入掌握Android NDK与JNI开发:Hello JNI案例解析

Android NDK(Native Development Kit)是Android平台的一个开发工具包,它允许开发者使用C和C++代码扩展Android应用程序的功能。NDK的引入主要针对需要高性能计算、访问硬件平台特有功能以及重用已有C/C++代码库的场景。NDK提供了一套工具集,包括编译器、构建系统和一些运行时库,这些运行时库使得C/C++代码能够与Java虚拟机(JVM)通过JNI(Java Native Interface)进行通信。

weixin_30218749的博客 712

[转]Android:JNI 与 NDK到底是什么?(含实例教学)

在Android开发中,使用NDK开发的需求正逐渐增大但很多人却搞不懂JNI与NDK到底是怎么回事今天,我将先介绍JNI与NDK& 之间的区别,手把手进行NDK的使用教学,希望你们会喜欢,即Java本地接口作用: 使得Java与 本地其他类型语言(如C、C++)交互即在Java代码 里调用C、C++等语言的代码 或C、C++代码调用Java代码特别注意:JNI是Java调用Native语言的一种特性JNI是属于Java的,与Android无直接关系,是Android的一个工具开发包。

空名先生 1319

IIR数字滤波器原理,设计方法及嵌入式应用

基于STM32的二阶直接II型巴特沃斯低通滤波器设计方法及应用

weixin_38342580的博客 1万+

NDK开发史诗级入门教程

ndk全称Native Developer Kits,Android NDK也是Android SDK的一个扩展集,用来扩展SDK的功能。NDK打通了Java和C/C++之间的开发障碍,让Android开发者也可以使用C/C++语言开发APP。众所周知:Java是在C/C++之上的语言,语言金字塔越往上对开发者就更加贴近,也就是更容易开发,但是性能相对也就越低。越往下对开发人员的要求也就越高,但是实现后的产品性能也越高,因为可以自己控制内存等模块的使用,而不是让Java虚拟机自行处理。NDK的使用场景。

yuhaibing111的博客 8340

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

Project 编制进度计划【项目管理】

Project 项目管理编制进度计划详解。

m0_52861684的博客 5084

Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。就会生成两个文件这几个so文件,如下图一,然后就能正常获取到C++文件(也就是cpp文件)中的数据了,还可以把so动态库提供给第三方使用,具体方式详见。在android的JNI中,要先将相应的C/C++打包成so库,然后导入到lib文件夹中供java调用。(5)安卓中的so文件是什么?

UrasakiNakajima的博客 8428

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

android NDK开发学习之Jni(一)

android ndk 开发之jni

binzai_16的博客 575

自抗扰控制(ADRC)原理与MATLAB实现详解

自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带

weixin_33585822的博客 94

Python 3.13.7 (64-bit)安装弹窗提示:Setup failed:0x80070643 - 安装时发生严重错误...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2109

Android 生成SO - 基础工程创建

Android 生成SO - 基础工程创建

vistaup的博客 2711

从 SM30 到 Fiori:在 SAP BTP ABAP Environment 里创建 Business Configuration 配置维护对象的完整路径

摘要 在SAP BTP的ABAP环境中,传统SAP GUI和SM30配置方式被Business Configuration (BC)替代。BC通过Fiori应用维护配置,支持传输和权限控制。配置表需满足可维护性条件,如允许数据维护、包含技术字段等。通过ADT生成Maintenance Object和Transport Object,实现配置发布与治理。权限管理需创建IAM App和Business Catalog,确保配置可维护。BC在云端延续了可控、可追溯、可发布的治理原则。 (字数:150)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 237

Android:JNI 与 NDK

在Android开发中,使用NDK开发的需求正逐渐增大但很多人却搞不懂JNI与NDK到底是怎么回事今天,我将先介绍JNI与NDK& 之间的区别,手把手进行NDK的使用教学,希望你们会喜欢,即Java本地接口作用: 使得Java与 本地其他类型语言(如C、C++)交互即在Java代码 里调用C、C++等语言的代码 或C、C++代码调用Java代码特别注意:JNI是Java调用Native语言的一种特性JNI是属于Java的,与Android无直接关系,是Android的一个工具开发包。

u013250861的博客 1509

华为OD机试真题 新系统 2026-08-02 C++ 实现【战士技能规划设计】

你为一款动作游戏设计战士角色的技能。战士每个技能会消耗不同能量,释放技能有两个约束:连续释放技能数量不能超过 m 个,技能能量总和不能超过能量上限 k;如果超过则必须中断当前技能,进入调息状态,也就是分段。

MISAYAONE的博客 72

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android JNI(一)——NDK与JNI基础

Java调用C/C++在Java语言里面本来就有的,并非Android自创的,即JNI。JNI就是Java调用C++的规范。当然,一般的Java程序使用的JNI标准可能和android不一样,Android的JNI更简单。

hirezy 3306

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

什么是NDK开发(一)

作者:代码大婶 在Android的官方文档上是这么解释NDK的:“原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问物理设备组件,例如传感器和轻触输入。”NDK是一个Android官方提供的一个开发套件与Android SDK相对应,NDK是原生开发套件,而SDK是JAVA开发套...

weixin_34583170的博客 7513

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JNI/NDK入门指南之正确姿势了解JNI和NDK

         你真的了解Android中JNI/NDK吗?    随着Android生态的发展,越来越多的行业开始使用Android操作系统,这就造就了对Android设备的应用性能和安全要求越来越高,随之而来的对JNI/NDK开发的需求也越来越大。虽然网上或者很多书籍都有关于此方面的讲解,但是都是上来直奔主题说怎么使用JNI/NDK,而没有将啥是JNI和NDK讲解清楚。所以导致很...

IT先森 3568

Android NDK与JNI的区别有何不同?

NDK是Android的一个工具开发包,帮助开发者快速开发C、 C++的动态库。JNI是 Java语言的一种特性,它的存在是为了Java与C/C++等语言互相调用。两者之间的其他差别敬请阅读博文。

luo_boke的博客 4420

NDK 入门(一)—— JNI 初探

宏是预处理器的一个重要概念,它是一种简单的文本替换机制。宏定义使用#define关键字,将一个标识符与一个文本片段关联起来。当源代码中出现宏标识符时,预处理器会将其替换为与之关联的文本片段。以下是一些常见的宏使用示例:// 定义 PI 为常量#define PI3.14159// 定义 PI 为常量 # define PI 3.14159 // 定义 MAX(a, b) 为宏函数 # define MAX(a , b)((a) >(b)?(a) :(b))

tmacfrank 1550

[NDK/JNI系列01] NDK与JNI的基本概念与使用场景

介绍是NDK和JNI,它们有什么作用和优势 使用场景和案例 , Android系统服务与JNI的通讯

我其实什么都不会 6767

JNI 与 NDK

JNI 与 NDK JNI 定义:Java Native Interface,即 Java本地接口 作用: 使得Java 与 本地其他类型语言(如C、C++)交互,Java代码与C,C++语言代码相互调用 注意: JNI是 Java 调用 Native 语言的一种特性 JNI 是属于 Java 的,与 Android 无直接关系 背景:Java 具备跨平台的特点,所以Java 与 本地代码交互...

mLuoya的博客 5083

NDK 入门(三)—— JNI 注册与 JNI 线程

在 Native 方法中把 JNIEnv 和 jobject 封装在 MyContext 中,然后把 MyContext 传入 pthread_create() 的第四个参数,在 线程的入口方法 task 中接收 MyContext 使用两个封装的参数回调上层方法。默认的注册方式就是静态注册,上面提到的模板方法 stringFromJNI() 就是通过静态注册生成的 JNI 函数 Java_com_jni_register_MainActivity_stringFromJNI()。

tmacfrank 2145

Android:JNI 与 NDK到底是什么?(含实例教学)

前言 在Android开发中,使用 NDK开发的需求正逐渐增大 但很多人却搞不懂 JNI 与 NDK 到底是怎么回事 今天,我将先介绍JNI 与 NDK & 之间的区别,手把手进行 NDK的使用教学,希望你们会喜欢 目录1. JNI介绍1.1 简介 定义:Java Native Interface,即 Java本地接口 作用: 使得Java 与 本地其他类型语言(如C、C++)交互 即在 Ja

Carson带你学Android 18万+

[Android]NDK开发环境配置与JNI开发

本文的目标是实现NDK开发环境的配置以及学习JNI开发流程。1.环境配置 本文的开发环境为win10 64位+Eclipse+Android ADT+NDK+CDT。 2.安装: 这里只介绍NDK和CDT的安装。 2.1从链接:http://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip下载NDK开发包

Forgive Me 6688
上一篇: Dart语言(一)—— 数据结构
下一篇: JNI与NDK开发(二)——JNI基本概念 与 Java对C或C++函数的简单调用
RedKeyer
博客等级 码龄11年 33粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值