Android NDK:更新 NDK 后出现“应用程序目标已弃用 ABI(s):armeabi”错误

9

昨天,更新NDK后,我出现了以下错误:

Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a 
future NDK release.    

这个链接把我带到了setup-app.mk文件的某些行。
_deprecated_abis := $(filter $(NDK_DEPRECATED_ABIS),$(NDK_APP_ABI))
ifneq ($(_deprecated_abis),)
  $(call __ndk_warning,Application targets deprecated ABI(s): 
  $(_deprecated_abis))
  $(call __ndk_warning,Support for these ABIs will be removed in a 
  future NDK release.)
endif

我不知道如何解决这个问题。有什么建议吗?
4个回答

15

我曾经遇到同样的问题,一直在避免清理或重建整个项目,直到我升级了最新的NDK并且问题重新出现。

这是因为即使删除了目标,app/.externalNativeBuild中仍然存在引用它们的文件。

要解决这个问题,我删除了Application.mk(我使用它来设置目标),并将以下内容添加到app/build.gradle中。

android {
    defaultConfig {

        // ...

        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a' // 'x86', 'x86_64' may be added
        }
   }

   // ...

    task ndkClean(type: Delete) {
        // remove unused archs from build cache
        delete fileTree('.externalNativeBuild') {
            exclude defaultConfig.ndk.abiFilters.collect { '**/' + it }
        }
    }
    tasks.findByPath(':clean').dependsOn ndkClean
}

在代码中添加注释,以便其他人遇到相同的问题时可以参考。我不得不删除最后一行中的“:”,这样我的Gradle构建才能找到clean任务。在此之前,它一直报错说无法在空对象上调用dependsOn方法。 - Ryan McCaffrey
谢谢!关于“app/.externalNativeBuild”的评论解决了我的问题。有点遗憾的是,清理操作并不能将其删除。 - RabidMutant

4

在 Application.mk 文件中,你需要设置 APP_ABI:= armeabi armeabi-v7a x86 mips 然后同步项目。这将解决你的问题。


1
从您的APP_ABI列表中删除armeabi。
如您从源代码中可以看到,这只是一个警告,而非错误。您是如何调用ndk-build的?

无论如何,我只是调用应用程序构建。 - Vadym
你的意思是什么?是指你正在使用Android Studio/gradle进行构建吗? - Dan Albert
本地属性文件 local.properties 已附加 NDK,但我没有调用它,而是使用了 clean、rebuild 和 run。也许我不理解你的意思。 - Vadym

0
如果有人仍然遇到这个问题,可以尝试以下几个步骤:
  • 删除构建文件夹,然后进行Build > Clean Project, Build > Rebuild Project
  • 如果上述方法不起作用,在Application.mk文件中添加

    APP_ABI:= armeabi-v7a arm64-v8a

    并从应用程序级别的gradle中链接它(就像Android.mk一样),然后再次尝试构建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接