背景:
经常芯片厂商或者终端厂商会在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
更多内容请关注下面“千里马学框架”