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. JNI:Android NDK 项目需要一个jni/目录,其中包含了Android.mk和其他相关的源代码文件。(因此,当项目根目录中不包含jni目录就会报错)
  2. Application.mk:这个文件是可选的,若存在则通常位于项目的jni/目录中。Application.mk文件定义了适用于整个项目的设置,如目标Android平台版本、要构建的CPU架构类型等。如果Application.mk存在于jni/目录下,ndk-build会首先读取它。
  3. Android.mk:这些文件位于项目的各个子目录中,并定义了如何编译这些目录中的源代码。每个Android.mk文件通常负责一个子项目或一个库。
  4. 执行顺序
    • 当在项目根目录中执行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脚本的能力,但本身并不是使用某种编程语言开发的程序。

Troubleshooting

(1)出现错误"Android NDK: Could not find application project directory ! Android NDK: Please define the NDK_PROJECT_PATH variable to point to it. …\Android\Sdk\ndk\xxx…\build\core\build-local.mk:151: *** Android NDK: Aborting . Stop.

进行在学习Android原生项目构建时,尝试在NDK项目上一级目录中执行ndk-build,出现错误:

Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
C:\Users\xxx\AppData\Local\Android\Sdk\ndk\26.1.10909125\build…\build\core\build-local.mk:151: *** Android NDK: Aborting . Stop.

我感觉主要原因是,父目录作为根目录不包含jni目录导致出错;

你可能感兴趣的:(android,学习,笔记)