Android NDK开发入门
发布时间 - 2026-01-10 21:58:14 点击率:次神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理,通过*教育网站,我初步了解了NDK的神秘面纱,好东西自然要分享,接下来我们就一起来认识一下Android NDK开发。

一、NDK产生的背景
Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。
不过,Google也表示,使用原生SDK编程相比Dalvik虚拟机也有一些劣势,Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用。
于是NDK就应运而生了。NDK全称是Native Development Kit。
NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式。NDK将是Android平台支持C开发的开端。
二、为什么使用NDK
1.代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2.可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。
3.提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
4.便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
三、NDK简介
1.NDK是一系列工具的集合
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2.NDK提供了一份稳定、功能有限的API头文件声明
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。
四、NDK开发环境的搭建
1.下载安装Android NDK
地址:http://developer.android.com/sdk/ndk/index.html
2、安装DNK
网上流传很多关于Linux环境搭建DNK开发的方法,不过今天要为大家说明一点,Google经过这些年的努力,现在NDK的安装已经非常简单,而且支持众多平台,今天我们就以win平台来为大家介绍如何配置开发环境与设计开发DNK程序。首先是安装,上面提供的下载地址是官网地址,大家可以根据自己的需求选择下载,不过由于在国内限制访问国外网站,所以下载的话必须FQ,FQ对于一些程序员来说又是一件难事,这里我为大家提供一个下载地址:android-ndk-r9
下载好之后,安装DNK非常简单,我们将下载的.zip文件解压,然后将文件拷贝到我们的任意一个磁盘中即可。
3.配置 NDK 环境变量
学过JAVA的小童鞋,对于配置环境变量一定不陌生,这里我就简单介绍一下如何配置DNK的开发环境,右键单击我的电脑-->属性-->高级系统设置-->高级-->环境变量
在打开的环境变量,系统变量中找到Path,双击,在最后将我们DNK安装目录添加上去。
到这里我们的win环境配置Android NDK开发环境已经完成,最后我们通过命令行验证一下我们的配置:点击开始-->输入cmd回车-->输入ndk-build回车,如果打印出信息表示我们的配置完成。
五、运行NDK提供的事例demo
运行事例demo之前我们需要保证我们的Android开发环境已经配置好,对于Android开发环境的配置,我就不再赘述,大家如果有疑问可以单独留言讨论。下面我们开始导入事例demo,打开eclipse Android开发环境,然后右键单击空白区域,选择Import-->Android导入:
导入工程后,我们先来看一下目录结构:
jni目录下的文件就是我们的.c文件,obj目录下的.so文件就是我们的ndk编译后的文件,也就是我们库文件。当然刚导入时工程中是没有.so文件的,需要我们编译生成,生成的方法:开始-->输入cmd回车-->cd 我们的工程目录回车,详见下图操作分解:
到这里我们事例demo就算完成了,下面我们就可以允许测试了。
第一个NDK程序:HelloWord!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# Android
# NDK开发
# 如何在Android Studio下进行NDK开发
# Android NDK生成及连接静态库与动态库的方法
# Android NDK开发(C语言基本数据类型)
# 自己的
# 第三方
# 我就
# 下载地址
# 右键
# 开发人员
# 开源
# 单击
# 就可以
# 应用程序
# 都是
# 反编译
# 完成了
# 也有
# 目录下
# 第一个
# 又是
# 首次
# 找不到
# 更大
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
EditPlus中的正则表达式 实战(1)
Laravel如何配置和使用缓存?(Redis代码示例)
如何用低价快速搭建高质量网站?
如何实现建站之星域名转发设置?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
如何在宝塔面板创建新站点?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
js实现获取鼠标当前的位置
如何快速查询网站的真实建站时间?
如何在 React 中条件性地遍历数组并渲染元素
HTML 中如何正确使用模板变量为元素的 name 属性赋值
iOS正则表达式验证手机号、邮箱、身份证号等
油猴 教程,油猴搜脚本为什么会网页无法显示?
微信小程序 wx.uploadFile无法上传解决办法
详解MySQL数据库的安装与密码配置
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何用PHP快速搭建高效网站?分步指南
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
jquery插件bootstrapValidator表单验证详解
如何获取免费开源的自助建站系统源码?
简历在线制作网站免费版,如何创建个人简历?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
免费视频制作网站,更新又快又好的免费电影网站?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
装修招标网站设计制作流程,装修招标流程?
Laravel如何使用Vite进行前端资源打包?(配置示例)
如何在阿里云部署织梦网站?
Windows Hello人脸识别突然无法使用
Thinkphp 中 distinct 的用法解析
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何用JavaScript实现文本编辑器_光标和选区怎么处理
如何快速搭建安全的FTP站点?
浅述节点的创建及常见功能的实现
如何在万网自助建站平台快速创建网站?
在centOS 7安装mysql 5.7的详细教程
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)

