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

ath*_*hos 3 c c++ android android-ndk android-manifest

我正在尝试更好地理解在使用ndk-build时如何选择api级别.

我知道我可以明确地设置APP_PLATFORMApplication.mk,并且否则NDK建造将针对在清单中与指定的API android:minSdkVersion,但如果我的应用程序清单既具有什么android:minSdkVersionandroid:targetSdkVersion,这比的minSdkVersion高?

ndk-build会定位targetSdkVersion吗?我怎么检查呢?

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

q54*_*461 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
Run Code Online (Sandbox Code Playgroud)


Ser*_* K. 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
Run Code Online (Sandbox Code Playgroud)

现在,您可以在C/C++代码中检查此定义:

#if defined( ANDROID9 )
   // do stuff for API Level 9
#endif
Run Code Online (Sandbox Code Playgroud)

  • 很好,谢谢!如果有人想知道,我能够进行测试并了解ndk-build的目标是清单中指示的** targetSdkVersion **。 (2认同)