如何知道我正在使用 ndk-build 构建哪个 API 级别?

How to know which API level I'm building for using ndk-build?

本文关键字:构建 API 级别 ndk-build 何知道      更新时间:2023-10-16

我试图更好地理解在使用ndk构建时api级别的选择是如何工作的。

我知道我可以在Application.mk中显式设置APP_PLATFORM,否则ndk构建将使用android:minSdkVersion针对清单中指示的api,但如果我的应用程序清单同时具有android:minSdkVersionandroid:targetSdkVersion,并且这高于minSdkVersion,该怎么办?

ndk是否将目标构建为targetSdkVersion?我该怎么查?

如果它的目标是更高的api级别,我想我将能够使用仅适用于该级别的本地api进行构建,但如果我在具有较低api级别的设备上运行应用程序,它应该会失败,所以在这种情况下,我应该实现某种api级别检查,这是正确的吗?

使用$NDK/platforms/android-<level>/<abi>/usr/include/android/api-level.h 中定义的__ANDROID_API__

#if __ANDROID_API__ >= 21
// building with Android NDK Native API level 21 or higher
posix_fadvise64(fd, ...);
#else
// building with Android NDK Native API level 20 or lower
syscall(__NR_arm_fadvise64_64, fd, ...);
#endif

在定义TARGET_PLATFORM和LOCAL_FLAGS 之后,将此代码放入Android.mk

ifeq ($(TARGET_PLATFORM),android-7)
    LOCAL_CFLAGS   += -DANDROID7
else
ifeq ($(TARGET_PLATFORM),android-8)
    LOCAL_CFLAGS   += -DANDROID8
else
ifeq ($(TARGET_PLATFORM),android-9)
    LOCAL_CFLAGS   += -DANDROID9
endif
endif
endif

现在你可以在你的C/C++代码中检查这个定义:

#if defined( ANDROID9 )
   // do stuff for API Level 9
#endif
  • Android:minSdkVersion

应用程序将在其上运行的android平台的最低版本。

  • Android:targetSdkversion

指定API级别,应用程序在该级别上运行

  • Android:maxSdkVersion

应用程序设计运行的Android平台的最大版本。