ndk-build问题集锦

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:

  1. 匹配 APP_PLATFORM 的平台版本。
  2. 低于 APP_PLATFORM 的下一个可用 API 级别。例如,APP_PLATFORM 为 android-20 时,将使用 android-19,因为 android-20 中没有新的原生 API。
  3. NDK 支持的最低 API 级别。

官网帮助文档

ndk-build

例子

  • 例子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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值