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

 配套系列教学视频链接:

Android 10.0 AOSP源码编译:

        AOSP源码开发环境搭建教学视频-百问100ask   

       Android系统 10.0 AOSP源码编译--CSDN程序员研修院

 Android 10.0 根文件系统和编译系统:

        Android根文件系统和编译系统教学视频-百问100ask

        Android 10.0 根文件系统和编译系统-CSDN程序员研修院


说明

系统: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值