在本机代码编译时找到AOSP中的Android版本?

时间:2013-05-28 15:26:40

标签: android android-source android-version

我正在为设备构建AOSP。有没有办法在本机代码编译时获得当前的AOSP版本?我正在寻找类似Linux中的LINUX_VERSION_CODE和KERNEL_VERSION(X,Y,Z)指令。更具体地说,我想在我自己的AOSP附加项目中做一些看起来像这样的事情:

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

2 个答案:

答案 0 :(得分:5)

您可以使用PLATFORM_VERSION和/或PLATFORM_SDK_VERSION,请参阅version_defaults.mk

答案 1 :(得分:4)

PLATFORM_VERSION在AOSP构建目录中定义:

<强>建立/核心/ 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。