如何知道我正在使用ndk-build构建哪个API级别?
我正在尝试更好地理解在使用ndk-build时如何选择api级别。
我知道我可以在Application.mk中明确设置APP_PLATFORM
,否则ndk-build将使用android:minSdkVersion
来定位清单中指示的api,但是如果我的应用程序的清单同时包含android:minSdkVersion
和android:targetSdkVersion
,那么这是高于minSdkVersion?
ndk-build会定位targetSdkVersion吗? 我怎么检查呢?
如果它针对更高的api级别,我想我将能够使用仅适用于该级别的本机apis进行构建,但是如果我在具有较低api级别的设备上运行该应用程序,它应该很难失败,所以在这种情况下我应该实现某种api级别的检查,这是正确的吗?
在定义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
使用$NDK/platforms/android-
#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
-
Android:minSdkVersion
运行应用程序的android平台的最低版本。
-
Android:targetSdkversion
指定应用程序设计为运行的API级别。
-
Android:maxSdkVersion
设计应用程序的Android平台的最高版本。
- sigemptyset()NDK UnsatisfiedLinkError dlopen()
- 是否可以直接从本机代码记录Android systrace事件,而不使用JNI?
- 使用Android Studio 2.2版的C / C ++
- 我可以在NDK应用程序中使用本机库(安装在Android堆栈中)吗?
- 在Eclipse中Navit Android项目
- Android如何增加ffmpeg mp4的性能?
- 使用open2(,int fd)的Android libusb
- Android VpnService保护存储在本机代码中的套接字?
- 使用Android NDK中的系统function在Android嵌入式设备上运行Shell脚本文件