【发布时间】: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