【问题标题】:WARNING: ABIs [armeabi-v7a,armeabi] set by 'android.injected.build.abi' gradle flag contained 'ARMEABI' not targeted by this project警告:由 'android.injected.build.abi' 设置的 ABI [armeabi-v7a,armeabi] gradle 标志包含 'ARMEABI' 不是此项目的目标
【发布时间】:2018-10-21 13:06:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我通过阅读 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"
          }
      }
      

    要及时了解新版本和注意事项,请按照此NDK Revision History 申请新更改。

    希望它能解决你的问题。

    【讨论】:

    • 我添加了 c++_shared 以使编译完全可以与 NDK-r18 一起使用,但是,我仍然有相同的 ARMEABI 警告。不知道现在正在尝试使用什么。
    • @chivorn 我认为 NDK-r16 仍然支持这一点,所以在那里不会有问题。 NDK-r18 仍然发生在我身上
    • @JimLeask 我也使用 ndk-r18。 Java 编译器在为设备构建时发出同样的警告。
    • 警告消失了,但应用程序在启动时崩溃。 (梯度构建,NDK 19)
    • 已检查 NDK 20。警告仍然存在。
    【解决方案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】:

      根据Android documentation,这是一个已知问题,这是因为 gradle 插件默认仍包含不受支持的 ABI。 armbeabi 在 NDKr16 中已弃用,并在 r17 中删除,因此发出警告。要修复,请在 splits.abi 下列出您支持的架构:

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

      【讨论】:

      • 我的构建已经包含 reset() 但仍然显示警告
      • 警告是否提到"armeabi"?使用reset() 后,您可能仍会看到有关其他架构的警告,具体取决于您的构建文件。
      • 是的,收到与 OP 完全相同的警告
      • 我最后猜想那会是一些 Android Studio 缓存
      【解决方案4】:

      这并不能解决我的问题,我通过添加这个来解决:

              ndk {
                  abiFilters "armeabi-v7a"
              }
      

      到 android.defaultConfig

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 2011-09-09
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多