Android:NDK

3.1 NDK
一、NDK的作用
(1)、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开发的开端。

(2)、为什么使用NDK
  1.代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。

2.可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

3.提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

4.便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

(3)、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 Studio
在这里插入图片描述
在这里插入图片描述
如果没有ndk,可以直接下载。下载安装完,会自动给你配置路径。

或者,可以先在网上下载好.

地址:http://developer.android.com/sdk/ndk/index.html

这个当然需要翻伟大的墙了。

不行的话推荐一个国内网站: http://wear.techbrood.com/tools/sdk/ndk/

找到对应自己操作系统的ndk环境。下载进来然后解压,将解压的路径配置进来就可以了。

(2)测试NDK和配置环境变量
安装完之后,配置好路径,我这里NDK解压完之后的路径是:

/home/itcast/BC-Project/Android-SDK/ndk-bundle
下面我们需用测试NDK是否能够正常跑起来。

我们需要用到ndk-build命令。这个指令在

/home/itcast/BC-Project/Android-SDK/ndk-bundle/ndk-build
所以为了每次不使用绝对路径来使用,我们需要修改全局环境变量PATH

打开~/.bashrc

在尾部添加如下代码:

export PATH=$PATH:/home/itcast/BC-Project/Android-SDK/ndk-bundle
退出保存,执行加载~/.bashrc指令

source ~/.bashrc
测试ndk-build指令

$ndk-build -v
如果没有任何报错信息,表示ndk已经安装并且配置成功.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 、JDK 、JRE都是什么意思?有什么区别?

摘自 JavaGuide (「Java学习面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!) JVM Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实…

看完这个你就牛了,自动化测试框架设计

一、引言 随着IT技术的快速发展,软件开发变得越来越快速和复杂化。在这种背景下,传统的手工测试方式已经无法满足测试需求,而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量,减少重复性的测试工作,从而…

AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比

本篇的目的是生成一个虚拟的女生形象。先进入正题说明人像怎么生成,本篇使用到的工具和工具的介绍放在文末。 先来一波Midjourney生成的美图提升下大家学习的欲望 以上四张图使用的是相同的Prompt,如下: a beautiful chinese girl, 18 years old, detailed and big eye…

WorkPlus企业IM即时通讯私有化部署,从源头把控安全

数字中国战略不断推进,国家集中力量大力推动数字产业创新发展,各大企业纷纷加快了数字化转型步伐,数据安全保护的意识也不断提升。即时通讯办公平台作为高效沟通、协同工作的重要工具,在企业数字化转型中有着不可或缺的作用。所以…

干货 | MOSFET开关:电源变换器基础知识及应用

MOSFET的工作原理 金属氧化物半导体场效应晶体管 (MOSFET) 是一种场效应晶体管 (FET) 电子器件。它可以充当压控电流源,并主要用作开关或用于放大电信号。MOSFET的控制是通过向栅极施加特定的电压来进行的。当MOSFET导通时,电流通过在 体区(称…

微信小程序引入 vant ui组件

1.初始化 在小程序根目录(app.js所在目录),打开cmd命令窗口 npm init -y参数 -y 表示对 npm 要求提供的信息,都自动按下回车键,表示接受默认值。 2.下载miniprogram依赖 通过 npm 安装: npm i vant/weapp -S --p…

初级算法-栈与队列

主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-栈与队列一、栈实现队列二、队列实现栈三、有效的括号四、删除字符串中的所有相邻重复项五、逆波兰表达式求值六、滑动窗口最大值七、前K个高频元素栈先进后出,不提供走访功能…

Vue3 关于setup与自定义指令

setup语法糖 最大好处就是所有声明部分皆可直接使用&#xff0c;无需return出去 注意&#xff1a;部分功能还不完善&#xff0c;如&#xff1a;name、render还需要单独加入script标签按compositionAPI方式编写 // setup 下还可以附加<script> setup语法糖独有 &…

改善Instagram客户服务的6个技巧

Instagram仍然是全球前四大社交网络&#xff0c;按用户数量排名。它通过其创新的过滤器、内容创建工具、视频和卷轴选项继续增长并推动流量。这是一个平台&#xff0c;世界顶级名人和有影响力的人可以为全球用户提供有趣和令人印象深刻的内容。 但不仅仅是一个娱乐平台&#xf…

MySQL数据库,表的增删改查详细讲解

目录 1.CRUD 2.增加数据 2.1创建数据 2.2插入数据 2.2.1单行插入 2.2.2多行插入 3.查找数据 3.1全列查询 3.2指定列查询 3.3查询字段为表达式 3.3.1表达式不包含字段 3.3.2表达式包含一个字段 3.3.3表达式包含多个字段 3.4起别名 3.5distinct(去重) 3.6order …

epoll进阶

epoll除了提供select/poll那种IO事件的电平触发&#xff08;Level Triggered&#xff09;外&#xff0c;还提供了边沿触发&#xff08;Edge Triggered&#xff09;&#xff0c;这就使得用户空间程序有可能缓存IO状态&#xff0c;减少epoll_wait/epoll_pwait的调用&#xff0c;提…

Cocos Creator 如何处理物理和碰撞检测?

Cocos Creator 如何处理物理和碰撞检测&#xff1f; cocos creator 版本:v3.6.1 Cocos Creator 3.x 实现碰撞检测 Cocos Creator 通过使用物理引擎来处理物理和碰撞检测。Cocos Creator 默认使用 Box2D 物理引擎&#xff0c;也支持使用 Chipmunk 物理引擎。以下是处理物理和碰撞…

Systemverilog中interprocess间synchronization和communication的记录

1. 同步和通讯机制的种类 systemverilog提供了三种方式&#xff1a;named event type(->, )、semaphore、mailbox。其中semaphores和mailbox虽然是built-in type&#xff0c;但它们是class&#xff0c;且可以作为base classes被扩展为更高level的class。这些built-in class…

VScode配置8086汇编环境

目录 0、感慨 1、VScode的安装 2、下载MASM/TASM插件 3、测试汇编环境 新建文件 汇编文件配置 汇编代码的运行 0、感慨 搭配一个简单些的环境&#xff0c;对于我们汇编的学习很有帮助&#xff0c;在这里又不得不感叹vscode的强大&#xff0c;使用VScodeMASM/TASM插件就…

ChatGPT入门必知必会

2023年是真正意义上的AI之年&#xff0c;因为ChatGPT 2007年&#xff0c;iPhone开启了智能手机时代&#xff0c;2023年&#xff0c;我们迎来了人工智能时代&#xff0c;我们正处于历史的大转折点上&#xff0c;这也许是启蒙运动级别的思想和社会转折&#xff0c;工业革命级别的…

关于“复活节Easter”知识,你了解多少?

复活节是基督教纪念耶稣复活的节日。耶稣被钉死在十字架上&#xff0c;死后第三天复活。Christians say Jesus died on Friday. On the third day, he rose from the dead. He became alive again. 复活节定在每年春分月圆之后第一个星期日举行。因为春分之后日照时间比较长&am…

NumPy 秘籍中文第二版:一、使用 IPython

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍以下秘籍&#xff1a; 安装 IPython使用 IPython 作为 Shell阅读手册页安装 matplotlib运行 IPython 笔记本导出 IPython 笔记本导入网…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出&#xff1a;ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”&#xff0c;还是“更笨”&#xff1f;更“强”&am…

8个商用图片素材库,你一定要收藏

在日常生活中&#xff0c;经常需要用到图片素材&#xff0c;但很多图片是有版权的&#xff0c;使用不当就会造成侵权。如何找到既能免费下载还能商用的图片素材呢~下面我就要把我收藏多年的商用图片素材网分享出来&#xff0c;希望对大家有帮助&#xff01; 1、菜鸟图库 https…

ROS如何进行开发?

文章目录0、引言1、安装ROS2、ROS创建工作空间和功能包3、在ROS中使用C代码4、在ROS中使用Python代码0、引言 笔者研究生的课题是关于多传感器数据融合的&#xff0c;传感器数据获取一般是通过Arduino或者树莓派获取&#xff0c;Arduino主要偏硬件开发&#xff0c;一般数据处理…