Android系统源码Build系统入门详解

本文介绍了Android系统源码中的构建系统,详细讲解了包含C的Android.mk文件的编写,包括LOCAL_PATH、CLEAR_VARS、LOCAL_MODULE等关键变量的含义和用法。同时,讨论了不含C的Android.mk文件的构建过程,涉及LOCAL_SRC_FILES、LOCAL_PACKAGE_NAME和LOCAL_CERTIFICATE等。此外,还阐述了模块之间的依赖关系和NDK定义的变量。
摘要由CSDN通过智能技术生成

前言

最近在做系统开发,很多知识都要重新归纳和整理,最近在编写Makefile文件的时候,网上找了些文章发现这篇文章对于入门很有价值《Android系统源码Build系统入门详解》文章大部分的内容都是转载原文的,我准备整理下,放在我自己的博客下方便我自己查阅。

1.包含C的Android.mk文件

以前早期版本的时候,我们再下载NDK的时候,通常都会有一个hello-jni的用例,方便我们自己去学习和理解,由于找不到了,我这里就直接将内容贴出来。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

第一行的解释

LOCAL_PATH := $(call my-dir)

此变量指示源文件在开发树中所处的位置。在这里,构建系统提供的宏函数my-dir将返回当前目录(Android.mk文件本身所在的目录)的路径。
LOCAL_PATH:是Build 系统设置的系统变量,要编译一个模块,只要在编译之前根据需要设置这些变量然后执行编译即可。

常用的系统编译变量
变量名 说明
LOCAL_SRC_FILES 当前模块包含的所有源代码文件。
LOCAL_MODULE 当前模块的名称,这个名称应当是唯一的,模块间的依赖关系就是通过这个名称来引用的。
LOCAL_C_INCLUDES C 或 C++ 语言需要的头文件的路径。
LOCAL_STATIC_LIBRARIES 当前模块在静态链接时需要的库的名称。
LOCAL_SHARED_LIBRARIES 当前模块在运行时依赖的动态库的名称。
LOCAL_CFLAGS 提供给 C/C++ 编译器的额外编译参数。
LOCAL_JAVA_LIBRARIES 当前模块依赖的 Java 共享库。
LOCAL_STATIC_JAVA_LIBRARIES 当前模块依赖的 Java 静态库。
LOCAL_PACKAGE_NAME 当前 APK 应用的名称。
LOCAL_CERTIFICATE 签署当前应用的证书名称。

这里我要单独提出来LOCAL_MODULE_TAGS,表示当前模块所包含的标签。标签的值可能是 debug, eng, user,development 或者 optional。其中,optional 是默认标签。标签是提供给编译类型使用的。不同的编译类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值