我正在尝试更好地理解在使用ndk-build时如何选择api级别。
我知道我可以在 Application.mk 中明确设置APP_PLATFORM
,否则ndk-build将使用android:minSdkVersion
定位清单中指示的api,但是如果我的应用程序的清单有android:minSdkVersion
和android:targetSdkVersion
,这比minSdkVersion高吗?
ndk-build会定位 targetSdkVersion 吗?我怎么检查呢?
如果它针对更高的api级别,我想我将能够使用仅适用于该级别的本机apis进行构建,但是如果我在具有较低api级别的设备上运行该应用程序,它应该会失败,所以在那种情况我应该实现某种api级别检查,这是正确的吗?
答案 0 :(得分:6)
在定义TARGET_PLATFORM和LOCAL_CFLAGS之后将此代码放入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
答案 1 :(得分:6)
使用__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
答案 2 :(得分:1)
Android:minSdkVersion
运行应用程序的Android平台的最小版本。
Android:targetSdkversion
指定应用设计为运行的API级别。
Android:maxSdkVersion
运行应用程序的Android平台的最大版本。