Android NDK基础

Android进阶-NDK技术 在学习ndk技术前,我们需要先了解一下JNI(Java Native Interface)技术,JNI技术是一种实现Java代码和C/C++代码之间交互的技术,它提供了一组编程接口,使得Java程序可以调用C/C++代码并与其进行通信。确实如此,用一句话概括它们之间的关系就是:开发者使用NDK技术在Android应用程序中编写C/C++代码,并将其编译成共享库(如.so文件),然后使用JNI技术在Java代码中加载并与这些C/C++代码进行交互。所以,如果哪部分功能需要保密,也可以用C/C++来实现。 阅读详情

终于下定决心开始写博客了,现在还是菜鸟一只,只能玩玩基础,废话不多说,这是羽化第一篇博客文章,以后会定期更新自己最近学习经历的文章,与大家共同学习,如果有错的地方希望大家指点,由于我还在学习中,大部分代码引用他人,如有冒犯,请见谅,非常感谢那些无私贡献的人,还有感谢公司里照顾我的同事们-0-

 

开发环境

Window XP

Eclipse Helios Service Release 2

NDK-r5c

cygwin 1.7.9

MB525 defy 部分代码要求系统2.2或2.2以上

 

本次学习

1.NDK需求方向

2.NDK环境搭建

3.NDK使用方法

4.NDK使用延展

 

1.NDK需求方向

网上很多介绍NDK的作用,我这只是说说基本方向,NDK提供的API不多,这些API主要用于游戏开发、性能挖掘等,比如:

l  OpenGL 2.0,包括支持(Java)SDK所支持的一些新版本

l  Math,(一些,但非全部的,专门针对计算的算法。在native层面实现可获得更好的性能)

l  2D graphics,从2.2开始支持像素缓冲(pixelbuffer)

l  libc,提供了兼容性支持,并可能为移植现有native代码提供方便

 

2.NDK环境搭建

1)在Eclipse中增加C/C++支持   //非必须

在Eclipse中选择Help—>Install new software,选择相应版本的站点选择下图的组建安装。

 

 

2)安装Cygwin 模拟提供Unix环境的工具

可以到www.cygwin.com下载Cygwin,选择在线安装(非常漫长。。。),在安装过程中Devel根节点边上的“Default”要点成“Install”。

 

 

也可以离线安装,LocalPackage Directory步骤中选择自己离线包的目录。Devel根节点也要点成“Install”。

 

 

 

注意:Cygwin很不安装很不稳定,如果第一次没安装成功就再安装一次试试。

 

若要检查必要工具是否安装成功,可以打开Cygwin后在里面输入gcc -v和make -v 可以看到相应信息。我是安装在C盘根目录下。


 

 

3)安装NDK

可以在http://developer.android.com/sdk/ndk/index.html下载最新的NDK,下载完成后放在任意地方,我是解压放在C盘根目录下。

 

 

3.NDK使用方法

先从简单的Hello开始,了解NDK的使用方法。

1) 创建项目NDK1,输入相应代码

无论是调用还是生成so,都必须要加载库和声明本地代码。

// 加载库 – 名字必须匹配jni/Android.mk
static
{
	System.loadLibrary("NDK12");
}
// 声明本地代码函数 – 必须匹配NDK1.c
private native String invokeNativeFunction();

注意:如果so文件生成后项目名字发生改变,生成的so文件是不能使用的,必须重新生成一遍。

 

2) 根节点创建一个文件夹jni,里面生成两个文件Android.mk和NDK1.c   //Android.mk名字不能更改

 

3) NDK1.c是C语言的内容,这里jstring表示返回的是String类型,后面的包路径一定不能搞错。

#include <string.h>

#include <jni.h>

jstring Java_com_LB_NDK1_NDK1_invokeNativeFunction(JNIEnv* env, jobject javaThis)
{
         return (*env)->NewStringUTF(env, "Hello from native code!");
}


 

4) Android.mk里面输入的数据必须按照一定的规则,其格式可以在网上查到。其中LOCAL_SRC_FILES的文件命要与C语言程序的文件名一样,LOCAL_MODULE的内容必须和主类里面的System.loadLibrary的内容一致。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)

LOCAL_MODULE          := NDK12

LOCAL_SRC_FILES       := NDK1.c

include $(BUILD_SHARED_LIBRARY)

 

5)准备步骤都完成了,就可以开始生成so文件 这里命令的写法可以去查下linux的常见命令

打开cygwin,在cygwin中打开项目所在的文件夹,为了方便把项目放在了C盘根目录下,输入cd /cygdrive/c/NDK1 就到了项目目录中。

 

/cygdrive/c/NDK1 运行NDK目录中的nkd-build就会自动生成so文件

 

 

此时打开项目会发现多出来两个文件夹obj和libs,里面就放着编译好的so文件

 

6) 此时运行项目,可以得到C语言中传来的字符串了,注意:C语言传输的String只能为UTF-8编码格式

 

4.NDK使用延展

1)运行一个简单算法

这里是用NDK2的例子,实现一个四则运算算法。

代码方面基本类似,这里使用了另一种生成方法,先生成一个.h的头文件。

 

具体生成方法,可以在cygwin中或者命令窗口中完成,这里在命令窗口中完成。

 

生成后放到jni目录下就可以了,其中NDK2.c写法发生了改变。

 

2)改变图片灰度

NDK3的例子,实现把一张图片灰度改变,和传统方法进行比较。

注意:由于是C++文件,所以Android.mk的写法发生改变

 

3) 数据传输

NDK4的例子,实现数据传输,在SD卡上创建文件。据说速度快于Android的传统方法。

 

4) 改变图片加强版

NDK5的例子,和NDK3类似。

这里使用了Application.mk,其作用是描述了应用程序需要哪些动态库和静态库。生成so文件方式一样,只要放在jni目录里面即可。注意:因为调用了某些库,不能在2.2一下的机器上运行。

 

5) OpenGL应用

Particletest的例子,通过OpenGl的接口,实现爆炸特效。

 

 

代码由羽化亲自修改真机上运行,没有任何问题,代码下载地址

http://download.youkuaiyun.com/source/3435189

 

下集预告:

Android Unity3D基础

Android JNI(一) —— NDK与JNI基础 Android jni也是开发中的一个重要环节,也是实现java与C交互的平台,接下来就来学习JNI. 本篇文章大纲如下: 1、导读 2、什么是NDK 3、为什么使用NDK 4、NDK到SO 5、JNI 一、导读 在Android OS上开发应用程序,Google提供了两种开发包:SDK和NDK。你可以从Google官方查阅到有许多关于SDK的优秀书籍、文章作为参考,但是Google提供的NDK... 阅读详情

相关推荐

Android Studio NDK基础使用

NDK是什么?Android平台是基于java实现,运行于虚拟机Dalvik;故而使用Android SDK创建应用程序需要使用java语言来编写实现。不过并不仅限于使用java,google在发布android之初就宣称支持持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。

Jokerlee的博客 3062

安卓系统开发之NDK

native

Gordon的博客 1597

Android中集成FFmpeg及NDK基础知识

log-lib说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有。

2401_84009529的博客 1004

Android NDK开发基础

仅作为个人学习记录,请小心求证。 https://developer.android.com/ndk/guides?hl=zh-cn 前言 NDK即Native Development Kit,是Android上用来开发c/c++的开发工具包。 安装步骤:https://developer.android.com/studio/projects/install-ndk 一、基础用法 在local.properties中配置ndk目录: ndk.dir=/Users/bc/android-ndk-r1.

BC工坊 5181

Android NDK与JNI基础

什么是NDK Android NDK 是一套工具集合,允许你使用C/C++语言来实现应用程序的部分功能。NDK本身其实就是一个交叉工作链,包含了Android上的一些库文件,然后,NDK为了方便使用,提供了一些脚本,使得更容易的编译C/C++代码。 什么是JNI JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通...

hwx865的专栏 614

NDK遍历sdcard简单实例(与java代码的速度对比)

一个NDK的简单实例。 具体内容看我博客。 http://blog.csdn.net/synwith/article/category/844774

Android之NDK环境配置+JNI开发+so文件编译

前言 这边Android作为日常记录,虽然破坏了文章队形~ 最近人工智能挺火的,也稍微了解了一些库,比如关于视觉库openCV。要在安卓下调用这些C/C++库,需要用到JNI开发,在此把过程分享一下。 概念 JNI:Java Native Interface的缩写。提供了API供java和其他语言通信,主要是C/C++。 NDK:Native Development K...

1656

Tessy学习系列(三):单元测试——官方例程isValueInRange

注意:工程名称以及路劲不能包含空格和中文

不吃鱼的猫的博客 2348

【Android -- JNI 和 NDK】认识 NDK

Native Development Kit ,是 Android 的一个工具开发包。

Kevin Learn Android 1780

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2490

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 474

Android NDK基础编程入门

对于还不了解Android NDK作用和搭建的朋友,可以先参考下Android NDK作用与搭建,今天这篇文章是建立在已经搭建好Android NDK开发环境,来看看NDK编程 "Hello Jni"的实现。   首先Android NDK开发需要具备哪些基础知识? 1.熟悉Android应用开发 2.熟悉C语言(编写底层.so库需要用到) 3.了解Linux(要知道一些常用的命令)

花花大神的专栏 1443

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

Android-NDK的基础使用

NDK基础 目录 环境信息 NDK是什么 JNI是什么 如何进行NDK开发 总结两点 创建工具 进行具体操作 第一步: 进行NDK开发的当然是下载NDK开发包 ,并在项目中配置好 第二步: 新建Java...

qq_36583893的博客 1149

【YOLOv11多模态涨点改进】独家创新首发 | TGRS 2025 | 引入CDFIM跨模态差异特征交互模块,通过差异特征提取和融合增强机制,减少了冗余信息,显著提升了小目标的检测精度,高效涨点改进

🔥本文给大家介绍使用 CDFIM跨模态差异特征交互模块改进 YOLOv11多模态目标检测,通过有效的差异特征提取和增强,显著提升了小目标的检测精度,特别是在复杂背景和低对比度环境下。该模块通过残差加法和通道与空间注意力机制,增强了可见光与红外模态之间的互补特征交互,减少了冗余信息,提高了检测稳定性。尽管提升了特征交互,CDFIM 仍保持轻量化设计,计算开销和参数量较低,适合实时检测应用。总的来说,CDFIM 模块在保留原始模态信息的同时优化了特征融合,有效提高了 YOLO 在多模态目标检测中的鲁棒性和精度

Ai缝合怪、助力小伙伴高效发论文 131

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

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

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示 本片文章大纲如下: 1、导读 2、什么是NDK ...

木叶风的博客 280

详解【异质图卷积网络 RGCN】回顾:图神经网络问题的三大处理步骤 | 从起源说起,RGCN核心公式解释,两种降低模型参数量/优化的方式,附核心代码实现讲解

本篇,我们深入分析和学习RGCN的原理以及为何要这么做。首先让我们来回顾对于图神经网络问题的三大处理步骤,可以说,这是该深度学习模型的基本理解,后续都是在深化其中的细节处理。然后以容易理解的方式,引出异质图卷积网络RGCN的由来,主要讲解其核心公式和论文中作者所提出的两种降低模型参数量/优化的处理办法,并给出基础分解以及块对角分解的核心实现代码讲解。最后附上RGCN源代码及说明。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1280

Android NDK基础和NDK独立编译SO环境搭建

目录 NDK编译SO环境搭建... 1 修订... 3 1. Android NDK基础... 4 1.1 简介... 4 1.2 结构... 4 1.3 目录详解... 6 1.4 工具详解... 7 1.4.1ndk-build.cmd. 7 1.4.2 Android.mk构建规则脚本... 8 1.4.3 Application.mk构建配置脚本... 18 1.5 Android NDK其他... 23 1.5.1 Android版本号... 23 1.5.2 精简内容.

Bonaventure的博客 838

手把手教您 Claude 桌面端无需账号订阅,免费接入国产自定义大模型(Claude Desktop 绕过订阅限制,接入任意自定义 AI 模型)

无需官方账号,也能畅玩Claude桌面端!本文详解Claude Desktop如何跳过登入接入自定义大模型,轻松解锁Cowork、Code等强大功能🚀

XiaoqiangClub的博客 5414

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android NDK开发基础知识

概要Android NDK开发对于初学者来说,往往会有丈二和尚摸不着头脑之感,所以在此处理清一些基础知识,总体来说有以下几个方面: ABI概念的理解。 使用C++的两种方式(Android Studio)。 Gradle配置.so文件的格式。 使用.so的注意事项。 ABI概念的理解到目前为止,Android系统总共支持7种不同的CPU架构,分别是: ARMv5 ARMv7 x86 MIPS ARM

沐雨清风 619

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android JNI——NDK与JNI基础

Android JNI(一)——NDK与JNI基础本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示 本片文章大纲...

蚂蝗征途 400

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android NDK --- JNI从入门到基础的全面掌握 (下)

【代码】Android NDK --- JNI从入门到基础的全面掌握 (下)

Mark Wu 的博客 277
下一篇: Android Unity3D基础
羽化
博客等级 码龄16年 323粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值