4

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

我知道我可以APP_PLATFORMApplication.mk中显式设置,否则 ndk-build 将针对清单中指示的 api android:minSdkVersion,但是如果我的应用程序的清单同时具有android:minSdkVersionandandroid:targetSdkVersion并且这高于 minSdkVersion 怎么办?

ndk-build 会针对targetSdkVersion吗?我该如何检查呢?

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

4

3 回答 3

7

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

#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
于 2015-08-19T04:24:00.027 回答
6

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

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
于 2012-07-26T08:48:01.833 回答
1
  • Android:minSdkVersion

运行应用程序的最低安卓平台版本。

  • Android:targetSdkversion

指定应用程序设计运行的 API 级别。

  • Android:maxSdkVersion

旨在运行应用程序的 Android 平台 的最高版本。

于 2012-07-26T03:01:05.710 回答