android cpp源码中ifdef定义变量如何在Android.mk中进行控制-手把手实战成功

背景:

经常芯片厂商或者终端厂商会在aosp的基础上做一些额外的定制功能,这个定制功能往往是在/BoardConfig.mk或者其他mk中添加定义一个FLAG全局变量,然后在Android.mk进行编译目标时候,会通过相关编译参数传递到代码中。这样就实现了对mk中定义的变量FLAG最后控制代码上的差异。

在这里插入图片描述

具体实战

实战环境 aosp 14 ,目标sdk_phone_x86_64

在产品mk定义相关的FLAG

添加路径
build/make/target/product/sdk_phone_x86_64.mk

在这里插入图片描述
添加了USE_TEST_MK :=true这个flag

在编译目标输出的mk判断flag,修改编译参数

前提:得目标编译是使用Android.mk,不适合Android.bp方式

这里选定frameworks/native/cmds/flatland 作为修改点

修改路径frameworks/native/cmds/flatland/Android.mk

Change-Id: I31df5abd628f74938f648a81db6cdf6d187b95ca
---
 cmds/flatland/Android.mk | 4 ++++
 cmds/flatland/Main.cpp   | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/cmds/flatland/Android.mk b/cmds/flatland/Android.mk
index 754a99caf6..490890b309 100644
--- a/cmds/flatland/Android.mk
+++ b/cmds/flatland/Android.mk
@@ -10,6 +10,10 @@ LOCAL_SRC_FILES:=   \
 
 LOCAL_CFLAGS := -Wall -Werror
 
+ifeq ($(USE_TEST_MK),true)#这里是关键,判断FLAG后修改编译参数LOCAL_CFLAGS
+    LOCAL_CFLAGS +=-DUSE_TEST_MK
+endif
+
 LOCAL_MODULE:= flatland
 LOCAL_LICENSE_KINDS:= SPDX-license-identifier-Apache-2.0
 LOCAL_LICENSE_CONDITIONS:= notice
diff --git a/cmds/flatland/Main.cpp b/cmds/flatland/Main.cpp
index 6d14d568a4..8f93253851 100644
--- a/cmds/flatland/Main.cpp
+++ b/cmds/flatland/Main.cpp
@@ -738,7 +738,11 @@ int main(int argc, char** argv) {
         showHelp(argv[0]);
         exit(0);
     }
-
+     #ifdef USE_TEST_MK //LOCAL_CFLAGS +=-DUSE_TEST_MK定义后就会有这个def这个USE_TEST_MK
+         printf(" TEST_USE_MK ok \n");
+     #else
+        printf(" TEST_USE_MK not ok \n");
+     #endif
     const auto ids = SurfaceComposerClient::getPhysicalDisplayIds();
     if (ids.empty()) {
         fprintf(stderr, "Failed to get ID for any displays.\n");
-- 
2.25.1

核心就是编译参数加上-DUSE_TEST_MK
LOCAL_CFLAGS +=-DUSE_TEST_MK
这样就可以在编译代码时候就会有#define USE_TEST_MK
如果有定义USE_TEST_MK,那么就会有如下打印:

 printf(" TEST_USE_MK ok \n");

没有就打印

 printf(" TEST_USE_MK not ok \n");

到此就把整个mk中定义FLAG和代码使用FLAG就完成了。

编译验证

常规进行env,lunch

 . build/envsetup.sh 
lunch sdk_phone_x86_64

修改定义mk后注意一定要重新lunch

这里flatland因为没有自带打入系统,所以需要单独编译一下这个模块

make flatland
在这里插入图片描述

这里等运行后,push到设备的/data/local/tmp目录

在这里插入图片描述
可以看到正常打印了:TEST_USE_MK ok

投屏专题部分:
https://mp.weixin.qq.com/s/IGm6VHMiAOPejC_H3N_SNg

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger

https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接:
https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值