Android NDK: Could not find application project directory
使用ndk-build NDK_PROJECT_PATH=./ NDK_APPLICATION_MK=./Application.mk APP_BUILD_SCRIPT=./Android.mk V=1
或者把android.mk application.mk放在jni目录下
gnustl_static 过期
目前版本不支持了,你可以下载一个低版本的ndk进行编译,或者修改成其他c++的库
比如APP_STL := c++_static
APP_PLATFORM 选择
APP_PLATFORM 会声明构建此应用所面向的 Android API 级别,并对应于应用的 minSdkVersion。
如果未指定,ndk-build 将以 NDK 支持的最低 API 级别为目标。最新 NDK 支持的最低 API 级别总是足够低,可以支持几乎所有有效设备。
警告:将 APP_PLATFORM 设置为高于应用的 minSdkVersion 可能会生成一个无法在旧设备上运行的应用。在大多数情况下,库将无法加载,因为它们引用了在旧设备上不可用的符号。
例如,值 android-16 指定库使用在 Android 4.1(API 级别 16)以前的版本中不可用的 API,并且无法在运行较低平台版本的设备上使用。如需查看平台名称和相应 Android 系统映像的完整列表,请参阅 Android NDK 原生 API。
使用 Gradle 和 externalNativeBuild 时,不应直接设置此参数。而应在模块级别 build.gradle 文件的 defaultConfig 或 productFlavors 块中设置 minSdkVersion 属性。这样就能确保只有在运行足够高 Android 版本的设备上安装的应用才能使用您的库。
请注意,NDK 不包含 Android 每个 API 级别的库,省略了不包含新的原生 API 的版本以节省 NDK 中的空间。ndk-build 按以下优先级降序使用 API:
- 匹配 APP_PLATFORM 的平台版本。
- 低于 APP_PLATFORM 的下一个可用 API 级别。例如,APP_PLATFORM 为 android-20 时,将使用 android-19,因为 android-20 中没有新的原生 API。
- NDK 支持的最低 API 级别。
官网帮助文档
例子
- 例子appliation.mk
#APP_STL := gnustl_static
APP_STL := c++_static
APP_ABI := arm64-v8a
APP_PLATFORM := android-28
- 例子 android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.cpp \
libteec_adaptor.c
LOCAL_C_INCLUDES = inc
LOCAL_LDLIBS +=-llog
LOCAL_LDLIBS +=-lz
LOCAL_CFLAGS +=-g
LOCAL_CFLAGS += -fPIC
LOCAL_LDFLAGS +=-pie
include $(BUILD_SHARED_LIBRARY)