【问题标题】:Error:Expected caller to ensure valid ABI: ARM64_V8A错误:预期调用方以确保有效 ABI:ARM64_V8A
【发布时间】:2016-11-23 03:44:33
【问题描述】:

我是 Android NDK 开发的新手。今天通过Android Studio Wizard搭建了一个项目,与普通Sdk开发不同的是我勾选了“Include C++ Support”。然后进入开发区,提示我gradle sync failed---“Error:Expected caller to ensure valid ABI : ARM64_V8A"。

我的开发环境是:

Android Studio2.2.2

JRE:1.8.0

操作系统:Windows 10 家庭版

错误日志如下:

2016-11-23 11:35:03,111 [12186031]   WARN - nal.AbstractExternalSystemTask - Expected caller to ensure valid ABI: ARM64_V8A 
com.intellij.openapi.externalSystem.model.ExternalSystemException: Expected caller to ensure valid ABI: ARM64_V8A
    at org.jetbrains.plugins.gradle.service.project.AbstractProjectImportErrorHandler.createUserFriendlyError(AbstractProjectImportErrorHandler.java:106)
    at org.jetbrains.plugins.gradle.service.project.BaseProjectImportErrorHandler.getUserFriendlyError(BaseProjectImportErrorHandler.java:158)
    at org.jetbrains.plugins.gradle.service.project.BaseGradleProjectResolverExtension.getUserFriendlyError(BaseGradleProjectResolverExtension.java:579)
    at org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension.getUserFriendlyError(AbstractProjectResolverExtension.java:158)
    at com.android.tools.idea.gradle.project.AndroidGradleProjectResolver.getUserFriendlyError(AndroidGradleProjectResolver.java:405)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$ProjectConnectionDataNodeFunction.fun(GradleProjectResolver.java:772)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$ProjectConnectionDataNodeFunction.fun(GradleProjectResolver.java:752)
    at org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper.execute(GradleExecutionHelper.java:238)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:112)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:73)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:41)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:37)
    at com.intellij.openapi.externalSystem.service.remote.AbstractRemoteExternalSystemService.execute(AbstractRemoteExternalSystemService.java:59)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl.resolveProjectInfo(RemoteExternalSystemProjectResolverImpl.java:37)
    at com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java:49)
    at com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:51)
    at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:138)
    at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:124)
    at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$3.execute(ExternalSystemUtil.java:419)
    at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$4$2.run(ExternalSystemUtil.java:500)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:563)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:142)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:446)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:392)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:127)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:126)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:369)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

经过我的仔细搜索,我发现它在 build.gradle(app) 中添加了一些内容

   externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}

删除后就OK了。其内容如下:

    # Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.

#cmake_minimum_required(VERSION 3.4.1)


# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
         native-lib

         # Sets the library as a shared library.
         SHARED

         # Provides a relative path to your source file(s).
         # Associated headers in the same location as their source
         # file are automatically included.
         src/main/cpp/native-lib.cpp )

# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
          log-lib

          # Specifies the name of the NDK library that
          # you want CMake to locate.
          log )

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
                   native-lib

                   # Links the target library to the log library
                   # included in the NDK.
                   ${log-lib} )

我已经向Android Studio bug report举报了。

我不知道这是否是我的错。感谢任何解释。

【问题讨论】:

  • 上周我也遇到了这个错误。这似乎与新版本的 AS 相关联:|我的一位同事通过 File -> Invalidate Caches/ Restart 让它工作,但它对我不起作用。
  • @Sipty 这对我不起作用。
  • 尝试更新到夜间构建的 AS 怎么样?还是恢复到旧版本?我 99% 确定这是版本错误,而不是用户错误!!!
  • 我的条件属于1%,我刚更新现在版本是2.2.3。这是我的新峰会code.google.com/p/android/issues/…

标签: android intellij-idea android-ndk


【解决方案1】:

今天,当我导入“echo”一个ndk示例时,它警告我

错误:预期的 NDK STL 共享对象文件位于 E:\Android_Sdk\ndk-bundle\sources\cxx-stl\llvm-libc++\libs\armeabi-v7a\libc++_shared.so

在搜索我的电脑和另一台电脑的ndk-build目录后,我发现了问题。 这是我的粗心造成的,我从另一台计算机复制了 ndk-build 目录,但它不是完整的副本。再次复制后问题消失了。

我真的很抱歉我的粗心。不知道该不该删帖,如果需要,请尽管告诉我。

【讨论】:

  • 如果你像我一样用谷歌搜索了这个错误并来到这里,也许你像我一样设置了ANDROID_NDK_PATH=/path/to/sdk/而不是ANDROID_NDK_PATH=/path/to/sdk/ndk-bundle/
猜你喜欢
  • 2019-06-25
  • 2016-05-15
  • 2013-07-16
  • 2011-10-20
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2017-12-14
相关资源
最近更新 更多