Android基础概念的学习笔记

1 Android原生编程

1.1 基础概念的文档链接

  • Android原生应用的一般流程 & 项目文件结构
  • Android.mk文件语法
  • Application.mk文件介绍

1.2 【Q】:ndk-build命令对于Application.mkAndroid.mk文件的处理顺序是什么样的呀?

Note:
Google的官方文档里面并没有没有十分明确而详细地说明ndk-build对于Application.mkAndroid.mk文件的处理顺序。

(1)关于ndk-build如何处理Android.mkApplication.mk文件的一些关键点

  1. Application.mk:这个文件是可选的,若存在则通常位于项目的jni/目录中。Application.mk文件定义了适用于整个项目的设置,如目标Android平台版本、要构建的CPU架构类型等。如果Application.mk存在于jni/目录下,ndk-build会首先读取它。
  2. Android.mk:这些文件位于项目的各个子目录中,并定义了如何编译这些目录中的源代码。每个Android.mk文件通常负责一个子项目或一个库。
  3. 执行顺序
    • 当在项目根目录中执行ndk-build时,它首先查找jni/目录中的Application.mk(如果存在)。
    • 然后,它会递归地搜索jni/目录及其子目录中的所有Android.mk文件,并根据这些文件中定义的依赖关系来确定编译顺序。
    • 每个Android.mk文件通常会被单独处理,以构建该文件定义的模块。
    • 如果Android.mk文件中定义了模块间的依赖关系,ndk-build将按照依赖顺序进行编译。

(2)具体的处理顺序可以通过查看ndk-build的源代码来了解

Phind:
虽然Google的官方文档没有明确说明这个处理顺序,不过,这个处理顺序是由ndk-build的源代码决定的,可以查看其源代码来了解。你可以在以下链接找到ndk-build的源代码:
[build/core - platform/ndk - Git at Google]
在这个链接中,你可以找到ndk-build的源代码,包括Application.mkAndroid.mk文件的处理顺序。

1.3 ndk-build:本质上是由make调用的一系列Makefile脚本

Q:“ndk-build工具实际上是.mk脚本”,是吗?

Claude-instant-100k:
是的,你的理解是正确的。
可以这么总结ndk-build:

  • ndk-build本身是一系列.mk脚本文件。
  • 这些.mk脚本文件使用Make语法定义了 Android NDK 项目构建的规则和依赖。
  • 在执行ndk-build命令时,实际上会在底层调用 gnu-make 工具。
  • Gnu-make 会解析和执行特定的.mk脚本,从而实现自动化构建 Android NDK 项目。
  • Gnu-make 具体在Windows上使用的是make.exe
  • 所以ndk-build本质上利用了Make语法的优势,实现了一个自动构建 Android NDK C/C++ 项目的脚本系统。
  • 因此并不是说ndk-build自己是用某种编程语言编写的,而是采用了Make这个DSL(领域特定语言)来进行自动构建流程。

总之,你说“ndk-build实际上是.mk脚本”,这个理解是正确的。它利用了Make脚本的能力,但本身并不是使用某种编程语言开发的程序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基本命令操作

一、命令操作快捷键 1.Tab键:自动补齐 2.ctrlL :清屏 二、使用命令获取帮助信息 1. # ls --help 2. # man ls 三、目录和文件管理命令 1. pwd \\显示路径 2. cd \\进入或切换目录 3.​​​​​​​ ls -l \\显示详细信息 4. ​​​​​​​ ls -a \\…

实验5:NAT配置

1.实验目的: 了解NAT的基本概念和功能 掌握NAT的配置方法和命令 观察和分析NAT的工作原理和流程 2.实验内容: 在路由器上配置静态NAT,实现内网主机通过公网IP地址访问外网服务器在路由器上配置动态NAT,实现内网主机通过公网I…

STM32的基本定时器注意点

本文介绍了STM32基本定时器3个重要的寄存器PSC、ARR、CNT,以及缓冲机制和计数细节。 基本定时器的框图 预分频器寄存器(TIMx_PSC)可以在运行过程中修改它的数值,新的预分频数值将在下一个更新事件时起作用。因为更新事件发生时,会把 TIMx_PS…

CGAL的最优传输曲线重构

1、介绍 此程序包实现了一种重建和简化二维点集的方法。输入是一组具有质量属性的二维点,可能受到噪声和离群值的干扰。输出是一组线段和孤立点,它们近似于输入点,如下图所示。质量属性与每个点的近似重要性有关。 左:输入点集受到…

@德人合科技——天锐绿盾|电脑文件防止泄密|文件、文档、图纸、源代码等透明加密保护,防泄密软件系统

德人合科技——天锐绿盾提供了一种企业办公电脑文件防止泄密的解决方案,该方案对文件、文档、设计图纸、源代码等进行了透明加密保护。 pc访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 透明加密是一种保护文…

基于ssm生活缴费系统及相关安全技术的设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对生活缴费信息管理混乱,出错率高,信息安全性差…

XXL-JOB的一些概念

XXL-JOB任务调度中心 路由策略 路由策略:当执行器集群部署时,选择哪一台机器进行执行job任务 第一个: 当选择该策略时,会选择执行器注册地址的第一台机器执行,如果第一台机器出现故障,则调度任务失败。 …

[PyTorch][chapter 7][李宏毅深度学习][深度学习简介]

前言: 深度学习常用的开发平台 TensorFlow torch theano caffe DSSTNE mxnet libdnn CNTK 目录: 1: 深度学习发展历史 2: DeepLearning 工程简介 3: DNN 简介 一 发展历史 二 DeepLearning 工程简介 深度学习三…

STM32--Wi-Fi插座_风扇_灯

项目需求 两个互相通信的双方,波特率必须相同!!!!!! 通过 ESP8266 模块,实现手机控制 wifi 插座 / 风扇 / 灯。 项目设计 串口 1 用于与 ESP8266 通讯,串口 2 连接 PC ,用于打印 log ,查看系统状态。 项目实现 注意&a…

【计算思维】第14届蓝桥杯省赛计算思维U12组真题试卷

第14届蓝桥杯省赛计算思维U12组真题试卷 选择题 第 1 题 单选题 晶晶在注册一个学习网站时,需要设置密码。 网站提示: 密码必须由8~16个字符组成,可以包含数字、大写字母、小写字母、特殊符号这4种字 符类型。 包含4种不同类型字符的…

英语六级作文好句

目录 开头 中间 结尾 开头 1. It has triggered heat discussion 2. some students think that .... while other think that.... I,m in line with/I firmly convinced that the former one/the later one. 3. With the proliferation of... 4. It is of great importance…

《数据结构、算法与应用C++语言描述》-最大高度优先左高树-C++实现

左高树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_26maxHblt 定义 (大顶堆和小顶堆)堆结构是一种隐式数据结构(implicit data structure)。用完全二叉树表示的堆在数组中是隐式存储的(即没有明确的指针或其他数据能够用来重塑…

数据结构从入门到入土——初识泛型

目录 一,包装类 1.基本数据类型和对应的包装类 2.装箱和拆箱 3.自动装箱和自动拆箱 二,什么是泛型? 三,引出泛型 语法 四,泛型类的使用 1.语法 2.类型推导(Type Inference) 五,裸类型(Raw Type) …

​xml.dom.minidom --- 最小化的 DOM 实现​

源代码: Lib/xml/dom/minidom.py xml.dom.minidom 是文档对象模型接口的最小化实现,具有与其他语言类似的 API。 它的目标是比完整 DOM 更简单并且更为小巧。 对于 DOM 还不十分熟悉的用户则应当考虑改用 xml.etree.ElementTree 模块来进行 XML 处理。 警告 xml.do…

PHP中如何进行单元测试和集成测试?

在 PHP 中,进行单元测试和集成测试通常使用测试框架来实现。以下是两个常用的 PHP 测试框架以及简要的介绍: PHPUnit(单元测试): 安装 PHPUnit: 可以使用 Composer 安装 PHPUnit。 composer require --dev …

mysql binlog_ignore_db参数的效果详解

​ 我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。 我们可以在mysql配置文件中关闭binlog [mysqld] skip-log-bin注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比如说只让某个库记录 binglog 或排除某个库记录…

<DB2>《DB2表空间状态说明列表》

十六进制值十进制值状态State0x00正常(请参阅 sqlutil.h 中的定义 SQLB_NORMAL)Normal (see the definition SQLB_NORMAL in sqlutil.h)0x11停顿:SHAREQuiesced: SHARE0x22停顿:UPDATEQuiesced: UPDATE0x44停顿:EXCLUS…

数据结构与算法:冒泡排序

原理 从前到后,连续相连两个数对比,如果前一个数大于后一个数,则交换。 第一次: arr[0] 和 arr[1] 对比,若arr[0] 大于 arr[1], 交换两个值。 arr[1] 和 arr[2]对比,若arr[1] 大于 arr[2]&…

Three.js中文网1-12入门案例

Three.js中文网 <template><div id"webgl"></div> </template><script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Scene const scene new THR…

openCV图像SIFT特征

SIFT&#xff08;尺度不变特征变换&#xff09;是一种用于计算图像局部特征的算法&#xff0c;它对图像的尺度、旋转和亮度变化具有不变性。SIFT特征在计算机视觉领域被广泛应用于目标识别、图像配准、三维重建等任务中。 SIFT特征的计算包括以下几个步骤&#xff1a; 尺度空…