gradle + ndkbuild + android studio 2.2 如何设置支持的 ABI?

Posted

技术标签:

【中文标题】gradle + ndkbuild + android studio 2.2 如何设置支持的 ABI?【英文标题】:gradle + ndkbuild + android studio 2.2 how to set supported ABIs? 【发布时间】:2017-04-20 23:58:36 【问题描述】:

我想使用 android studio 与 ndkbuild 的集成。

我的项目“原生”部分仅为 armeabi-v7a-hard 和 x86 构建, 如果我只是在 jni 目录中运行 ndk-build ,那么一切正常。 我在Application.mk 中有适当的台词:

APP_ABI := armeabi-v7a-hard x86

为了将项目集成到android studio中,我将这些行添加到build.gradle

externalNativeBuild 
    ndkBuild 
        path 'src/lib/jni/Android.mk'
    

但由于某种原因,gradle build 尝试使用 APP_ABI=armeabi 构建本机代码并失败,因为我的代码只能使用 armeabi-v7a-hard 构建。

那么我怎样才能告诉 gradle 只为 armeabi-v7a-hardx86 构建我的代码, 或者只是不忽略来自Application.mkAPP_ABI 行?

我尝试了这样的变体:

defaultConfig 
    ndk 
      abiFilters 'x86', 'armeabi-v7a-hard'
    

但是gradle 失败并显示这样的消息:

ABI [armeabi-v7a-hard] 不适用于平台,将 排除在建筑和包装之外。可用的 ABI 是 [armeabi, armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64]。

请注意,我使用的是 ndk 10,而不是最后一个 (ndk 13),其中 armeabi-v7a-hardndk.dirlocal.properties 中的正确值。

【问题讨论】:

***.com/a/35275134/3290339 【参考方案1】:

@Titan 提供的链接是设置 ABI 所需的全部内容。

它可能无法正常工作的原因是因为 armeabi-v7a-hard 在 2015 年已被弃用,因此定位它会导致此问题。你应该按照这个this post定位armeabi-v7a

【讨论】:

以上是关于gradle + ndkbuild + android studio 2.2 如何设置支持的 ABI?的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件ProductFlavor 配置 ( ProductFlavor#externalNativeBuild配置 | cmake 配置 | ndkBuild 配置 )

NDKBuild 失败

Android Ndkbuild与Cmake

使用 externalNativeBuild.ndkBuild 编译的 Android 原生调试

AS使用ndkbuild创建cpp工程记录

gradle构建android项目