在AOSP上本地代码编译时如何查找Android版本?

3

我正在为一个设备构建AOSP。有没有一种方法在本地代码编译时获取当前的AOSP版本?我正在寻找类似于LINUX_VERSION_CODE和KERNEL_VERSION(X,Y,Z)指令在Linux中的东西。更具体地说,我想在我自己的AOSP附加项目中执行类似于以下内容的操作:

#if (ANDROID_VERSION_CODE >= ANDROID_VERSION(4,2,1))
... compile something ...
#else
... compile something else...
#endif
2个回答

6
大概可以使用 PLATFORM_VERSION 和/或 PLATFORM_SDK_VERSION,请参见 version_defaults.mk

1
我就是这样做的。在构建时解析PLATFORM_VERSION字符串,将它们作为PLATFORM_VERSION_MAJOR、PLATFORM_VERSION_MINOR、PLATFORM_VERSION_REVISION传递,并定义一个ANDROID_VERSION,通过在编译时移位和或运算这些PLATFORM_VERSION_*值来创建平台版本代码。 - smichak
smichak - 你能在这里发布你的代码吗?对我来说PLATFORM_VERSION总是为空。不确定我做错了什么。 - Bill
1
PLATFORM_VERSION是在build/core/version_defaults.mk中定义的一个make变量。您可以在自己的makefile中解析它,从中提取主要、次要和修订号,并构建版本代码。我已经为此添加了一个答案。 - smichak

4
PLATFORM_VERSION在AOSP构建目录中定义:
build/core/version_defaults.mk:
ifeq "" "$(PLATFORM_VERSION)"
  # This is the canonical definition of the platform version,
  # which is the version that we reveal to the end user.
  # Update this value when the platform version changes (rather
  # than overriding it somewhere else).  Can be an arbitrary string.
  PLATFORM_VERSION := 5.1
endif

在您的产品的makefile(或任何其他地方)中定义以下make变量,并将它们作为宏传递给编译器:
# Passing Android version to C compiler
PLATFORM_VERSION_MAJOR := $(word 1, $(subst ., ,$(PLATFORM_VERSION)))
PLATFORM_VERSION_MINOR := $(word 2, $(subst ., ,$(PLATFORM_VERSION)))
PLATFORM_VERSION_REVISION := $(word 3, $(subst ., ,$(PLATFORM_VERSION)))
COMMON_GLOBAL_CFLAGS += -DPLATFORM_VERSION_MAJOR=$(PLATFORM_VERSION_MAJOR) \
                        -DPLATFORM_VERSION_MINOR=$(PLATFORM_VERSION_MINOR)
ifneq ($(PLATFORM_VERSION_REVISION),)
COMMON_GLOBAL_CFLAGS += -DPLATFORM_VERSION_REVISION=$(PLATFORM_VERSION_REVISION)
endif

定义一个带有版本代码的头文件:

android_version.h:

#define ANDROID_VERSION(major, minor, rev) \
        ((rev) | (minor << 8) | (major << 16))

#ifndef PLATFORM_VERSION_REVISION
#define PLATFORM_VERSION_REVISION 0
#endif

#define ANDROID_VERSION_CODE ANDROID_VERSION( \
        PLATFORM_VERSION_MAJOR, \
        PLATFORM_VERSION_MINOR, \
        PLATFORM_VERSION_REVISION)

现在,要根据Android版本做编译时决策,只需包含android_version.h文件并使用预处理器的#if语句即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接