学习Android.mk 笔记

Android.mk 详解


前言那里对Android.mk只是简单提了一句介绍,下面的介绍是更加官方一点和详细的介绍。

Android.mk文件是Android开发中的一个编译脚本文件,用于描述和管理项目的编译过程。

下面是Android.mk文件的一些详解:

概述:Android.mk文件是使用GNU make语法编写的,它定义了项目中的模块和编译规则。每个模块都有一个对应的Android.mk文件,用于指定编译参数、依赖关系和生成的目标文件等。

模块定义:Android.mk文件中可以定义多个模块,每个模块都有一个唯一的模块名。模块可以是可执行文件、静态库、共享库等。通过LOCAL_MODULE变量来指定模块名。

源文件定义:Android.mk文件中使用LOCAL_SRC_FILES变量来指定模块的源文件。可以使用通配符来匹配多个文件,如*.cpp表示所有的cpp文件。

编译选项:Android.mk文件中可以指定编译选项,如指定编译器、编译标志等。通过LOCAL_CFLAGS、LOCAL_CPPFLAGS、LOCAL_LDFLAGS 等变量来设置。

依赖关系:Android.mk文件中可以指定模块的依赖关系,即一个模块依赖于其他模块。通过LOCAL_STATIC_LIBRARIES、LOCAL_SHARED_LIBRARIES等变量来指定依赖的静态库或共享库。

目标文件生成:Android.mk文件中可以指定生成的目标文件的名称和路径。通过LOCAL_MODULE_FILENAME、LOCAL_MODULE_PATH等变量来设置。

其他功能:Android.mk文件还支持其他一些功能,如指定需要编译的源文件、排除某些源文件、指定编译器、链接器等。可以通过查阅Android.mk文件的官方文档或相关教程来了解更多功能和用法。

总之,Android.mk文件是Android开发中的一个重要文件,用于管理项目的编译过程。通过编写Android.mk文件,可以指定模块的编译选项、依赖关系和生成的目标文件等。这样可以方便地管理和组织项目的代码和资源。

编译动态库.so

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 设置模块名
LOCAL_MODULE := mylibrary
# 添加源文件
LOCAL_SRC_FILES := myfile.cpp
# 添加额外的依赖库
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)


 

编译静态库.a

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 设置模块名
LOCAL_MODULE := mylibrary
# 添加源文件
LOCAL_SRC_FILES := myfile.cpp
include $(BUILD_STATIC_LIBRARY)


 

Android.mk 编译文件小结

编译模版:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
# 设置模块名或者apk名称
LOCAL_MODULE := mylibrary

#根据情况设置相关编译属性
...

#编译相关类型
include $(TYEPXXX) 

#------------多个模块编译的情况,先清除属性
include $(CLEAR_VARS)
# 设置模块名或者apk名称
LOCAL_MODULE := mylibrary2

#根据情况设置相关编译属性
...

#编译相关类型
include $(TYEPXXX2)

所有的Android.mk都是基于上面的模版进行适配的。

除了头文件的固定写法:“LOCAL_PATH := $(call my-dir)”, 后续都是先清除属性,再编译某个类型模块…。

属性的定义就是 “XXX := YYY”, 注释使用 # 在前面表示注释标识的。

在实际的文件中可能有几百行,这一般是多个模块编译的情况,

不用头晕,只看自己相关模块那段代码,

每个模块都有一个模块名称 LOCAL_MODULE ,找到开始和结束的部分适配修改即可。

最后编译的:include $(TYEPXXX)类型总结:

编码类型和关键字


1、apk文件,BUILD_PREBUILT
2、app代码,BUILD_PACKAGE
3、动态库,BUILD_SHARED_LIBRARY
4、静态库,BUILD_STATIC_LIBRARY
5、代码编译成Jar包,BUILD_JAVA_LIBRARY
6、jar包编译到系统,BUILD_MULTI_PREBUILT

常用的编译类型基本就上面这些。

Android系统源码编译Android.mk文件方式:

(1)在源码release目录,输入 make -j64 “LOCAL_MODULE名称”

(2) cd 到Android.mk模块目录,输入"mm"

Android.mk 主要属性

1. LOCAL_PATH:指定当前Makefile文件所在的路径。
2. LOCAL_MODULE:指定模块的名称。
3. LOCAL_SRC_FILES:指定模块的源文件列表。
4. LOCAL_C_INCLUDES:指定C/C++源文件的包含路径。
5. LOCAL_SHARED_LIBRARIES:指定模块依赖的共享库。
6. LOCAL_STATIC_LIBRARIES:指定模块依赖的静态库。
7. LOCAL_MODULE_TAGS:指定模块的标签,用于在构建系统中对模块进行分类和归类。
8. LOCAL_MODULE_CLASS:指定模块的类别,表示模块在构建系统中的类型或角色。
9. LOCAL_MODULE_SUFFIX:指定模块的文件名后缀。
10. LOCAL_CERTIFICATE:指定模块的签名配置。
11. LOCAL_USE_AAPT2:指示是否使用AAPT2作为资源打包工具。
12. LOCAL_PACKAGE_NAME:指定生成APK文件的包名。
13. LOCAL_PACKAGE_SIGNED_KEY:指定APK文件的签名配置,如"release"或"debug"。

Android.mk概述

一、Android.mk文件

Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译。
因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变量都是全局的。因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。
一个Android.mk文件可以编译多个模块, 每个模块属下列类型之一 :
   1)APK程序
  一般的Android程序,编译打包生成apk文件
   2)JAVA库
  java类库,编译打包生成jar文件
   3)C\C++应用程序
 可执行的C\C++应用程序
   4)C\C++静态库 
编译生成C\C++静态库,并打包成.a文件
   5)C\C++共享库
编译生成共享库(动态链接库),并打包成.so文, 有且只有共享库才能被安装/复制到您的应用软件(APK)包中。
  可以在每一个Android.mk file 中定义一个或多个模块,你也可以在几个模块中使用同一个
源代码文件。  编译系统为你处理许多细节问题。例如,你不需要在你的 Android.mk 中列出头文件和依
赖文件。编译系统将会为你自动处理这些问题。这也意味着,在升级 NDK 后,你应该
得到新的toolchain/platform支持,而且不需要改变你的 Android.mk 文件。
   注意,NDK的Anroid.mk语法同公开发布的Android平台开源代码的Anroid.mk语法很接近,然而编译系统实现他们的
方式却是不同的,这是故意这样设计的,可以让程序开发人员重用外部库的源代码更容易。
   在描述语法细节之前,咱们来看一个简单的"hello world"的例子,比如,下面的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值