3

デバイス用の AOSP を構築しています。ネイティブ コードのコンパイル時に現在の AOSP バージョンを取得する方法はありますか? Linux の LINUX_VERSION_CODE および KERNEL_VERSION(X,Y,Z) ディレクティブに似たものを探しています。より具体的には、私自身の AOSP アドオン プロジェクトの 1 つで、次のようなことをしたいと考えています。

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

2 に答える 2

6

PLATFORM_VERSIONおそらく、 and/orを使用できます。version_defaults.mkPLATFORM_SDK_VERSIONを参照してください。

于 2013-05-28T17:52:54.797 に答える
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 を使用します。

于 2015-06-21T13:10:18.447 に答える