Android NDK开发详解之NDK 使用入门
Android NDK开发详解之NDK 使用入门
- 下载 NDK 和工具
- 创建或导入原生项目
原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架 API 开发应用。然而,如果您需要实现以下一个或多个目标,那么 NDK 就能派上用场:
进一步提升设备性能,以降低延迟或运行游戏或物理模拟等计算密集型应用。重复使用您自己或其他开发者的 C 或 C++ 库。
您可以在 Android Studio 2.2 或更高版本中使用 NDK 将 C 和 C++ 代码编译到原生库中,然后使用 Android Studio 的集成构建系统 Gradle 将原生库打包到 APK 中。Java 代码随后可以通过 Java 原生接口 (JNI) 框架调用原生库中的函数。如需详细了解 Gradle 和 Android 构建系统,请参阅配置您的版本。
Android Studio 编译原生库的默认构建工具是 CMake。由于很多现有项目都使用 ndk-build 构建工具包,因此 Android Studio 也支持 ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。
本指南提供了在 Android Studio 中设置和运行 NDK 所需的信息。如果您没有最新版 Android Studio,请立即下载并安装吧。
实验性 Gradle 版本的用户注意事项:如果您符合以下任意一种情况,请考虑迁移到插件版本 2.2.0 或更高版本,并使用 CMake 或 ndk-build 构建原生库:您的原生项目已经使用 CMake 或者 ndk-build;您想要使用稳定版本的 Gradle 构建系统;或者您希望支持插件工具,例如 CCache。否则,您可以继续使用实验性版本的 Gradle 和 Android 插件。
下载 NDK 和工具
如需为您的应用编译和调试原生代码,您需要以下组件:
Android 原生开发套件 (NDK):这套工具使您能在 Android 应用中使用 C 和 C++ 代码。CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。LLDB:Android Studio 用于调试原生代码的调试程序。
如需了解如何安装这些组件,请参阅安装及配置 NDK 和 CMake。
创建或导入原生项目
Android Studio 设置完成后,可以直接创建支持 C/C++ 的新项目。但如果您要向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:
创建新的原生源代码文件,并将其添加到 Android Studio 项目中。如果您已经拥有原生代码或想要导入预构建原生库,则可跳过此步骤。
创建 CMake 构建脚本,指示 CMake 如何将原生源文件构建入库。如果导入和关联预构建库或平台库,您也需要此构建脚本。如果现有的原生库已有 CMakeLists.txt 构建脚本,或使用 ndk-build 并包含 Android.mk 构建脚本,则可跳过此步骤。
提供一个指向 CMake 或 ndk-build 脚本文件的路径,将 Gradle 关联到原生库。Gradle 使用构建脚本将源代码导入您的 Android Studio 项目并将原生库(SO 文件)打包到 APK 中。注意:如果您的现有项目使用已废弃的 ndkCompile 工具,则应先打开 build.properties 文件,并移除以下代码行,然后再配置 Gradle 以使用 CMake 或 ndk-build:// Remove this line
android.useDeprecatedNdk = true通过点击 Run 图标 从主菜单运行应用 构建并运行应用。Gradle 会以依赖项的形式添加 CMake 或 ndk-build 进程,用于编译和构建原生库并将其随 APK 一起打包。
应用在实体设备或模拟器上运行后,您可以使用 Android Studio 调试应用。如需详细了解 NDK 及其组件,请参阅概念页面。
相关文章:
Android NDK开发详解之NDK 使用入门
Android NDK开发详解之NDK 使用入门 下载 NDK 和工具创建或导入原生项目 原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,…...
nmap指纹识别要点以及又快又准之方法
nmap指纹识别要点以及又快又准之方法 一. 前言:二. nmap识别实验:一. 实验一:IP配置:空间配置:扫描结果:详细输出二. 实验二:IP配置:空间配置:扫描结果:详细输出三. 实验三:IP配置:空间配置:扫描结果:详细输出四. 实验四:IP...
Rust编程基础之6大数据类型
1.Rust数据类型 在 Rust 中, 每一个值都属于某一个 数据类型(data type), 这告诉 Rust 它被指定为何种数据,以便明确数据处理方式。我们将看到两类数据类型子集:标量(scalar)和复合(compound&a…...
06 MIT线性代数-线性无关,基和维数Independence, basis, and dimension
1. 线性无关 Independence Suppose A is m by n with m<n (more unknowns than equations) Then there are nonzero solutions to Ax0 Reason: there will be free variables! A中具有至少一个自由变量,那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…...
Kubernetes 概述以及Kubernetes 集群架构与组件
目录 Kubernetes概述 K8S 是什么 为什么要用 K8S K8S 的特性 Kubernetes 集群架构与组件 核心组件 Master 组件 Node 组件 编辑 Kubernetes 核心概念 常见的K8S按照部署方式 Kubernetes概述 K8S 是什么 K8S 的全称为 Kubernetes,Kubernetes 是一个可移植、可扩…...
GZ035 5G组网与运维赛题第9套
2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子…...
使用Jasypt3.0.3版本对SpringBoot配置文件加密
时间 2023-11-01 使用Jasypt3.0.3版本对SpringBoot配置文件加密 目录 引入依赖使用密钥生成密文配置yml验证是否自动解密 引入依赖 <!--yml 文件加解密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-b…...
生成一篇博客,详细讲解springboot的单点登录功能,有流程图,有源码demo
SpringBoot是目前非常流行的一个Java开发框架,它以简洁的配置和快速的开发效率著称。在实际应用中,单点登录是一个非常重要的功能,它可以让用户在多个应用系统中使用同一个账号登录,提高用户体验和安全性。本文将详细讲解如何在Sp…...
Hadoop、Hive安装
一、 工具 Linux系统:Centos,版本7.0及以上 JDK:jdk1.8 Hadoop:3.1.3 Hive:3.1.2 虚拟机:VMware mysql:5.7.11 工具下载地址: https://pan.baidu.com/s/1JYtUVf2aYl5–i7xO6LOAQ 提取码: xavd…...
PHP自定义函数--输入起始日期和解算日期返回日期差几天和 上一个周期的起始结束日期
/** 日期差几天* param beginDate:2018-01-26 endDatee:2018-01-26* return int days* */ function dateDiff($beginDate, $endDate) {$diff date_diff(date_create($beginDate), date_create($endDate))->format(%R%a);return (int)$diff; }/** 返回上一周期的起始和结束日…...
.net 7 上传文件踩坑
(Name “file”) 没加上这个传不进文件 /// <summary>/// 上传单个文件/// </summary>/// <param name"formFile"></param>/// <returns></returns>[HttpPost("UploadFiles")][FunctionAttribute(MuType.Btn, "…...
C++基础算法④——排序算法(快速、归并附完整代码)
快速排序 快速排序是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,以达到整个序列有序。 假设我们现在对 …...
高防CDN如何在防护cc上大显神通
高级防御CDN(Content Delivery Network)在对抗CC(HTTP Flood)攻击方面扮演着关键的角色,具备以下重要职能和作用: 流量分散:CC攻击的目标是通过大规模的HTTP请求使服务器过载,从而导…...
解决CSS中height:100%失效的问题
出现BUG的场景,点击退出到登录页面,发现高度不对 上面出现了一种只是占了内容的高度,没有占满100%,为什么会出现这种情况呐? 让div的height"100%",执行网页时,css先执行到࿰…...
小红书穿搭类种草营销怎么做?纯干货
在众多营销方式中,穿搭类种草营销以其独特的优势在小红书平台上崭露头角。穿搭类种草营销,以其独特的优势,成为了品牌和商家推广产品的重要方式。其优势主要体现在以下几个方面: 1. 高度相关性:小红书平台的用户主要是…...
什么是ARFF文件,以.arff结尾
关于arff,主要涉及三个输入类:概念、实例和属性。 1.概念简单而言就是需要被处理的东西, 2. 实例这个词有些陌生,但是可以大致认为其为样本, 3. 属性就是数据表中的一列。 为什么要用arff?(arff介绍&#x…...
华为OD机考算法题:计算疫情扩散时间
题目部分 题目计算疫情扩散时间难度难题目说明在一个地图中(地图由 n * n 个区域组成)有部分区域被感染病菌感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算多少天以后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染࿰…...
29岁从事功能测试5年被辞,面试4个月还没到工作......
最近一个32岁的老同学因为被公司辞退,聊天过程中找我倾诉,所以写下了这篇文章。 他是15年二本毕业,学的园林专业,人属于比较懒的那种,不爱学习,专业学的也一般。实习期间通过校招找到了一份对口的工作。但…...
再记【fatal error C1001: 内部编译器错误】的一个原因
平台:Windows 11、Visual Studio 2022 报错信息 已启动生成... 1>------ 已启动生成: 项目: PointMatchingModel, 配置: Debug x64 ------ 1>PointMatchingModel.cpp 1>C:\tools\vcpkg\installed\x64-windows\include\pcl\registration\impl\ia_fpcs.hpp…...
数据分析、大数据分析和人工智能之间的区别
数据分析、大数据分析和人工智能近年来十分热门,三者之间看起来有相似之处,也有不同之处。今天就来谈谈三者间的区别。 数据分析 数据分析是指对数据进行分析,从中提取有价值的信息,以支持企业或组织的决策制定。数据分析可以针对…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
