警告:由'android.injected.build.abi'gradle标志设置的ABIs [armeabi-v7a,armeabi]包含此项目未定位的'ARMEABI'

时间:2018-05-11 07:04:25

标签: android android-ndk java-native-interface

上次将NDK版本升级到Android Studio中的最新版本后,我遇到了此问题。我也找到了解决这个问题的方法。如果有人有这个问题,我希望这是你最好的问题和答案。请检查我的答案。

4 个答案:

答案 0 :(得分:18)

我通过在release note here上阅读NDK修订版16找到了解决方案。

  1. 如果您使用 Application.mk 配置项目,只需将以下内容添加到 Application.mk 文件中:

    APP_STL := c++_shared
    
  2. 如果您通过Gradle使用 CMake ,请将以下内容添加到build.gradle:

    externalNativeBuild {
        cmake {
            cppFlags ""
            arguments "-DANDROID_STL=c++_shared"
        }
    }
    
  3. 要及时了解新版本和说明,请按此NDK Revision History申请新的更改。

    我希望它可以解决您的问题。

答案 1 :(得分:5)

根据Android documentation,这是一个已知问题,其原因是gradle插件默认仍包含不受支持的ABI。在NDKr16中不推荐使用armbeabi,在r17中将其删除,因此发出警告。要进行修复,请在splits.abi下列出您支持的体系结构:

...
splits {
    abi {
        ...
        reset()
        include "x86", "armeabi-v7a", ...
    }
}

答案 2 :(得分:2)

有同样的问题,并通过添加以下设置修改模块build.gradle文件来解决:

android {
    ...
    splits {
        abi {
            enable true
            reset()
            include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
            universalApk true //generate an additional APK that contains all the ABIs
        }
    }

    project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.versionCodeOverride =
                   project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode
        }
    }
}

祝您好运。

答案 3 :(得分:0)

这不能解决我的问题,我通过添加以下内容来解决:

        ndk {
            abiFilters "armeabi-v7a"
        }

到android.defaultConfig