【问题标题】:How to fix: "ABI filter 'arm64-v8a' is no longer supported in NDK version x"如何修复:“NDK 版本 x 不再支持 ABI 过滤器‘arm64-v8a’”
【发布时间】:2019-11-12 15:30:53
【问题描述】:

我正在从另一家公司建立一个涉及自制 C++ 跨平台库的 android 项目。对于这些库的旧版本,一个完整的应用程序项目是用 java 制作的,带有一个 jni 接口来访问这些库,这些库存储为带有 gradle.build 文件的自己的模块。由于谷歌对应用程序更新的要求,我们的目标是让应用程序编译为 arm64-v8a 架构。

项目设置如下:

  • gradle 实验插件 0.11.0
  • gradle 插件 4.1
  • 为 armeabi-v7a 提升 1.64.0(替换为 arm64-v8a 预编译库)
  • opencv 2.4.13.2
  • ndk r15c

我检查了所有依赖项以获得 arm64 挂件,这只是 boost 依赖项所需要的。

我尝试更改用于每个项目的 ABI 列表以包括所有架构或全部单独。我尝试使用其他 ndk 版本。可能有帮助但我没有完成的是将实验性 gradle 插件更改为普通插件,但我无法做到这一点。

我预计会出现一些编译或链接错误,但它只告诉我“NDK 版本 r15.2.4203891 不再支持 ABI 过滤器‘arm64-v8a’。”。如果我尝试其他架构,我会得到相同的错误,但不是'arm64-v8a'当前选择的架构。如果我给出一个无效的架构,它会更改为“不支持目标 ABI 'hello'。”,所以它可以识别我认为的架构。

第一个错误的堆栈跟踪: 配置项目 ':app' 时出现问题。

执行模型规则时抛出异常:NdkComponentModelPlugin.Rules#configureNativeLibrary(ModelMap, NdkConfig, NdkHandler, ModelMap, File, ServiceRegistry) > create(livestage) > withType() 执行模型规则时抛出异常:NdkComponentModelPlugin.Rules#configureNativeLibrary(ModelMap, NdkConfig, NdkHandler, ModelMap, File, ServiceRegistry) > create(lib-jni-cxx) > withType() 执行模型规则时抛出异常:NdkComponentModelPlugin.Rules#configureNativeBinary(BinaryContainer, ModelMap, NdkConfig, NdkHandler) > withType() NDK 版本 r15.2.4203891 不再支持 ABI 过滤器“arm64-v8a”。

【问题讨论】:

  • 你应该升级到 NDK r20。

标签: android-ndk


【解决方案1】:

实验性插件多年来一直没有得到支持,所以它不起作用也就不足为奇了。迁移到externalNativeBuildhttps://developer.android.com/studio/projects/add-native-code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2021-12-16
    相关资源
    最近更新 更多