当前位置: 首页 > news >正文

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中具有至少一个自由变量&#xff0c;那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…...

Kubernetes 概述以及Kubernetes 集群架构与组件

目录 Kubernetes概述 K8S 是什么 为什么要用 K8S K8S 的特性 Kubernetes 集群架构与组件 核心组件 Master 组件 Node 组件 ​编辑 Kubernetes 核心概念 常见的K8S按照部署方式 Kubernetes概述 K8S 是什么 K8S 的全称为 Kubernetes,Kubernetes 是一个可移植、可扩…...

GZ035 5G组网与运维赛题第9套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…...

使用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开发框架&#xff0c;它以简洁的配置和快速的开发效率著称。在实际应用中&#xff0c;单点登录是一个非常重要的功能&#xff0c;它可以让用户在多个应用系统中使用同一个账号登录&#xff0c;提高用户体验和安全性。本文将详细讲解如何在Sp…...

Hadoop、Hive安装

一、 工具 Linux系统&#xff1a;Centos&#xff0c;版本7.0及以上 JDK&#xff1a;jdk1.8 Hadoop&#xff1a;3.1.3 Hive&#xff1a;3.1.2 虚拟机&#xff1a;VMware mysql&#xff1a;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++基础算法④——排序算法(快速、归并附完整代码)

快速排序 快速排序是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分记录的关键字小&#xff0c;则可分别对这两部分记录继续进行快速排序&#xff0c;以达到整个序列有序。 假设我们现在对 …...

高防CDN如何在防护cc上大显神通

高级防御CDN&#xff08;Content Delivery Network&#xff09;在对抗CC&#xff08;HTTP Flood&#xff09;攻击方面扮演着关键的角色&#xff0c;具备以下重要职能和作用&#xff1a; 流量分散&#xff1a;CC攻击的目标是通过大规模的HTTP请求使服务器过载&#xff0c;从而导…...

解决CSS中height:100%失效的问题

出现BUG的场景&#xff0c;点击退出到登录页面&#xff0c;发现高度不对 上面出现了一种只是占了内容的高度&#xff0c;没有占满100%&#xff0c;为什么会出现这种情况呐&#xff1f; 让div的height"100%"&#xff0c;执行网页时&#xff0c;css先执行到&#xff0…...

小红书穿搭类种草营销怎么做?纯干货

在众多营销方式中&#xff0c;穿搭类种草营销以其独特的优势在小红书平台上崭露头角。穿搭类种草营销&#xff0c;以其独特的优势&#xff0c;成为了品牌和商家推广产品的重要方式。其优势主要体现在以下几个方面&#xff1a; 1. 高度相关性&#xff1a;小红书平台的用户主要是…...

什么是ARFF文件,以.arff结尾

关于arff,主要涉及三个输入类&#xff1a;概念、实例和属性。 1.概念简单而言就是需要被处理的东西&#xff0c; 2. 实例这个词有些陌生&#xff0c;但是可以大致认为其为样本&#xff0c; 3. 属性就是数据表中的一列。 为什么要用arff&#xff1f;&#xff08;arff介绍&#x…...

华为OD机考算法题:计算疫情扩散时间

题目部分 题目计算疫情扩散时间难度难题目说明在一个地图中(地图由 n * n 个区域组成)有部分区域被感染病菌感染区域每天都会把周围(上下左右)的4个区域感染。 请根据给定的地图计算多少天以后&#xff0c;全部区域都会被感染。 如果初始地图上所有区域全部都被感染&#xff0…...

29岁从事功能测试5年被辞,面试4个月还没到工作......

最近一个32岁的老同学因为被公司辞退&#xff0c;聊天过程中找我倾诉&#xff0c;所以写下了这篇文章。 他是15年二本毕业&#xff0c;学的园林专业&#xff0c;人属于比较懒的那种&#xff0c;不爱学习&#xff0c;专业学的也一般。实习期间通过校招找到了一份对口的工作。但…...

再记【fatal error C1001: 内部编译器错误】的一个原因

平台&#xff1a;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…...

数据分析、大数据分析和人工智能之间的区别

数据分析、大数据分析和人工智能近年来十分热门&#xff0c;三者之间看起来有相似之处&#xff0c;也有不同之处。今天就来谈谈三者间的区别。 数据分析 数据分析是指对数据进行分析&#xff0c;从中提取有价值的信息&#xff0c;以支持企业或组织的决策制定。数据分析可以针对…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

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日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...