0
点赞
收藏
分享

微信扫一扫

Android 10 根文件系统和编译系统(八):Android.mk 标志和控制编译

 配套系列教学视频链接:

​​Android 10 根文件系统和编译系统-51cto学堂​​

说明

系统:AOSP Android10.0

设备:Android模拟器

前言

Android.mk中可以使用很多标志位和控制逻辑, 语法遵从Makefile,本章节介绍常见的一些用法。

一, gcc中用到的各种标志

LOCAL_C_INCLUDES := -DMYDBG=1

LOCAL_C_INCLUDES += -DHAVE_CONFIG_H

LOCAL_C_INCLUDES += -DLOG_TAG=\"my_tag\"

LOCAL_C_INCLUDES += -g -O2 -Wall  \

 -Wno-unused-parameter \

-Wno-implicit-function-declaration \

-Wno-unused-function \

-Wno-unused-variable  \

        -Wno-incompatible-pointer-types-discards-qualifiers \

        -Wno-format \

        -Wno-error \

        -Wno-date-time \

-W-no-xxx在编译的时候用会比较多, 在Android系统中,编译器要求比较严格, 比如变量定义但没使用, 类型从大转换成小, 都会报错,根据出错信息添加-W-no-xx基本可以解决这种问题。

二, Android.mk中完成shell 命令 

在mk文件中经常要会用到shell脚本, 如下例子:

LOCAL_POST_INSTALL_CMD := \

cp -ravf  lib/*.so  $(TARGET_OUT_VENDOR_SHARED_LIBRARIES);

 通过make或者mmm命令编译时, LOCAL_POST_INSTALL_CMD这个变量赋值的内容, 将会自动按照shell命令执行

或者用如下用法:

current_tag := $(shell git -C $(LOCAL_PATH) describe --tags)


三,条件判断

NEED_APP := y

ifeq ($(NEED_APP), y)

        xxx

else

        yyy

endif

如判断当前Android版本:

ifeq (1,$(strip $(shell expr $(PLATFORM_SDK_VERSION) \>= 27)))

        xxx

else

        yyy

endif

上面的意思是, 如果当前Android源码版本大于等于Android 8 (Android O,对应的API 级别是27)。 expr命令是用于数学计算的。 

四, Android.mk中进行调试

$(warning  "++PLATFORM_SDK_VERSION = $(PLATFORM_SDK_VERSION)")

$(info  "++branch = $(current_branch)")

调试比较重要,类似我们在c代码中使用printf一样。


总结

以上只是我在开发中常用的, 后期如果有更多发现, 再补充进来

举报

相关推荐

0 条评论