2013-05-28 71 views
3

我正在構建設備的AOSP。有沒有辦法在本機代碼編譯時獲得當前的AOSP版本?我正在尋找類似於LINUX_VERSION_CODE和KERNEL_VERSION(X,Y,Z)指令的東西。更具體地講,我願意做一些事情,看起來像這樣在我自己的AOSP附加項目之一:在本機代碼編譯時查找AOSP中的Android版本?

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

回答

5

也許,你可以使用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

+0

smichak - 你可以在這裏發佈你的代碼嗎? PLATFORM_VERSION對我來說一直是空的。不知道我做錯了什麼。 – Bill

+1

PLATFORM_VERSION是在build/core/version_defaults.mk中定義的make變量。您可以在自己的makefile中解析它,從中提取主要版本號,次要版本號和修訂版編號並構建版本代碼。我爲此添加了一個答案。 – smichak

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 

在你的產品的生成文件(或其他地方)定義下面讓變量,並將它們傳遞作爲宏編譯:

# 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。