`
andy_叶
  • 浏览: 69256 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android ndk 之 多个模块 Android.mk 编写

 
阅读更多

最近在移植一个linux下的c库到android,学习编写Android.mk文件,特地花了点时间学习。
  在网上搜了很多,最后发现还是看ndk的文档最直接,也最全面,下面的总结主要是根据ndk提供的文档编写的。
  1、单一的Android.mk文件:
  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  LOCAL_MODULE := hello-jni
  LOCAL_SRC_FILES := hello-jni.c
  include $(BUILD_SHARED_LIBRARY)
  LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径。
  include $(CLEAR_VARS)的作用是清除一些变量的值,但是LOCAL_PATH除外。
  LOCAL_MODULE是用来指定当前待编译模块的名称,在示例中的模块名称为hello-jni
  LOCAL_SRC_FILES是用来指定参与编译的源代码文件。这里只编译hell0-jin.c
  include $(BUILD_SHARED_LIBRARY)是用来指示将当前模块编译为共享库,前缀为lib,后缀为.so。
  还有另外一个BUILD_STATIC_LIBRARY,是用来指示将当前模块编译为静态库的,前缀为.a,后缀为.a。
  这就是一个最简单的Android.mk的结构。可能还有另外一点需要介绍:
  LOCAL_C_INCLUDES:=include 这个是用来指定在编译时即将使用的c头文件的位置,以当前目录为起点。
  2、定义多个Android.mk文件。
  有的时候,需要编译的模块比较多,我们可能会将对应的模块放置在相应的目录中,这样,我们可以在每个目录中定义对应的Android.mk文件(类似于上面的写法),最后,在根目录放置一个Android.mk文件,内容如下:
  include $(call all-subdir-makefiles)
  只需要这一行就可以了,它的作用就是包含所有子目录中的Android.mk文件
  3、也可以在一个Android.mk文件里包含多个模块。
  很直观的想法就是将第一个Android.mk文件的内容复制一份,然后修改。我最开始也是这样做的,但是后来出现问题了,在第二个模块中的源码找不到,最后还是看文档,发现里面已经有示例解释了:
  LOCAL_PATH := $(call my-dir)
  IMPORTANT NOTE: Due to the way GNU Make works, this really returns
  the path of the *last* *included* *Makefile* during the parsing of
  build scripts. Do not call my-dir after including another file.
  大意是:基于GNU make的工作方式,$(call my-dir)会返回在解析build脚本时,遇到的最后一个 include中涉及的目录。
  所以,很多时候,在这个Android.mk里面只需要调用一次$(call my-dir)就够了,如果所有的源文件都在一个目录中。
  如果需要的话,可以在第一次调用call my-dir的时候,将值保存下来,比如:
  MY_LOCAL_PATH := $(call my-dir)
  LOCAL_PATH := $(MY_LOCAL_PATH)
  然后,在另外一个模块中,继续如下定义:
  LOCAL_PATH := $(MY_LOCAL_PATH)
  在编译一般的c源代码时,上面的基本可以满足了,等后面需要,再继续补充吧!

分享到:
评论

相关推荐

    Android NDK开发指南-android.mk文件

    Android.mk 文件是一个微型的 GNU Makefile 片段,由 build system 解析一次或者多次。该文件用于描述 build system 的配置,定义了编译过程中的变量和依赖关系。 Android.mk 文件的基本语法结构如下: 1. LOCAL_...

    生成android.mk文件

    `android.mk`文件是Android原生构建系统(NDK)中用于定义模块构建规则的脚本,主要用于C/C++原生库的编译。本篇文章将深入探讨`android.mk`文件的生成及其作用。 **1. android.mk文件简介** `android.mk`文件是...

    androidmk 转换Android.bp工具方法

    本篇文章将详细介绍如何进行`androidmk`到`Android.bp`的转换,并探讨两者之间的差异以及转换工具的使用方法。 一、`Android.mk`与`Android.bp`概述 1. `Android.mk`:这是Android早期使用的构建系统,基于GNU ...

    Android.mk文件语法规范

    在同一个Android.mk文件中,可以使用`$(call add-subdirectory, )`命令引入子目录,以便管理多个模块。每个子目录应有自己的Android.mk文件,这样可以保持代码组织清晰。 六、条件编译 Android.mk支持条件编译,...

    android ndk application.mk

    本篇文章将深入探讨如何使用`application.mk`文件进行NDK编译,以及与之对比的CMake构建系统。 `application.mk`是Android NDK中的一种传统构建系统,它主要用于定义编译参数、链接器选项、依赖库等。这个文件是`...

    android编译系统makefile(Android.mk)写法

    `$(CLEAR_VARS)`宏用于清除所有与编译相关的LOCAL_XXX变量,保留`LOCAL_PATH`,这样可以在同一Makefile中定义多个模块而不会相互干扰。 3. **编译目标类型** - `include $(BUILD_STATIC_LIBRARY)`:编译生成静态库...

    ffmpeg移植android需要的android.mk

    在FFmpeg移植过程中,我们需要创建一个自定义的`Android.mk`文件,声明FFmpeg源代码的位置、依赖库、编译选项等,使得NDK能够正确构建FFmpeg库。 4. **配置FFmpeg**:在创建`Android.mk`之前,需要先配置FFmpeg,...

    Android.mk生成工具

    - 如果项目包含多个模块,每个模块可能需要单独的Android.mk文件。 - 使用预处理器宏或条件编译指令,以适应不同平台和配置。 总的来说,Android.mk生成工具是提高NDK开发效率的一个有力助手,它可以帮助开发者快速...

    Packt.Android.NDK.Beginner's.Guide.2012

    3. **本地项目结构**:理解Android原生模块的项目结构,包括Android.mk和Application.mk文件的使用,用于构建和配置原生库。 4. **C/C++编程**:复习C/C++基础知识,如数据类型、控制流程、函数、指针等,并介绍...

    ffmpeg ndk编译目录结构以及Android.mk

    总之,FFmpeg的NDK编译涉及到对源代码的组织、构建脚本的编写、配置文件的定制以及NDK环境的配置等多个环节。通过熟练掌握这些知识,开发者可以充分利用Android的原生性能,为移动应用提供强大的多媒体处理能力。

    android ndk编程实例(含注释,如何打包多个so)

    本实例将深入探讨如何进行Android NDK编程,包括Android.mk构建文件的语法注释、打包多个SO(Shared Object)库以及将项目移植到X86架构平台。 **Android.mk文件详解** Android.mk是NDK构建系统中的核心文件,用于...

    Android.mk之语法规范

    在同一个Android.mk文件中可以定义一个或多个模块,并且不同的模块可以共用相同的源文件。 构建系统还提供了一定程度的自动化支持,例如无需在Android.mk文件中显式列出头文件或指定文件间的依赖关系。这意味着在...

    android.mk文件介绍

    1. **模块(Module)**:`Android.mk`中的每个模块通常代表一个单独的库或可执行文件。 2. **变量(Variable)**:用于定义与构建相关的各种参数,如源文件路径、模块名等。 3. **宏(Macro)**:提供预定义的功能,...

    Android Studio 基于mk 开发ndk 使用c

    在Android平台上进行原生代码开发时,NDK(Native Development Kit)是一个不可或缺的工具,它允许开发者使用C或C++编写高性能、低级别的系统代码。本教程将专注于使用Android Studio结合mk文件进行NDK开发。mk文件...

    android&mk

    2. **模块定义**:每个`android.mk`文件可以定义一个或多个模块。模块通常对应一个静态库或动态库。如: ``` include $(CLEAR_VARS) LOCAL_MODULE := hello ``` 3. **源文件列表**:定义模块的C/C++源文件。...

    NDK_2_3_1.zip

    其中,NDK(Native Development Kit)是Android平台的一个重要组件,它允许开发者使用C和C++等原生代码来编写部分应用程序,从而提升性能、处理底层硬件交互或利用已有的C/C++库。本篇文章将基于"NDK_2_3_1.zip",...

    Android NDK Beginner’s Guide第五章源码

    - Android.mk定义了模块(module),每个模块包含一组源文件和依赖项,编译时会生成对应的静态库或动态库。 - Application.mk通常用来设置全局构建选项,如APP_ABI指定支持的CPU架构,APP_STL选择使用的C++运行时...

    android ndk 开发

    值得注意的是,可以在同一个`Android.mk`文件中定义多个模块,并且不同模块间可以共享相同的资源文件。编译系统能够自动处理一些细节问题,比如头文件和文件之间的依赖关系等,这使得开发者无需在`Android.mk`文件中...

    android.mk FILE

    - 对于复杂的项目,可能需要在同一个 `Android.mk` 文件中定义多个模块,或者在多个文件中定义相同的源代码。这种情况下,需要注意正确配置各个变量,以确保每个模块都能正确构建。 通过以上介绍,我们可以了解到 `...

Global site tag (gtag.js) - Google Analytics