【问题标题】:Android studio 3.5 requires Refresh Linked C++ project each time I build the app每次构建应用程序时,Android Studio 3.5 都需要刷新链接的 C++ 项目
【发布时间】:2019-09-11 12:02:44
【问题描述】:

自从我在运行应用程序时更新到 Android Studio 3.5(无论我选择哪个按钮),首先发生的就是这个错误:

Build command failed.
Error while executing process Library/Android/sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /.cxx/cmake/prodDebug/arm64-v8a --target jni-lib}
[1/5] Building CXX object ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/LocationExpert.cpp.o
[2/5] Building CXX object ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/ElasticGPS.cpp.o
[3/5] Building CXX object ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/GRRunnableHandler.cpp.o
[4/5] Linking CXX shared library ../../../../build/intermediates/cmake/prodDebug/obj/arm64-v8a/libMobileNativeCoreSharedLib.so
FAILED: : && /android-ndk-r16/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++  --target=aarch64-none-linux-android --gcc-toolchain=/android-ndk-r16/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64 --sysroot=/android-ndk-r16/sysroot -fPIC -isystem /android-ndk-r16/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /android-ndk-r16/platforms/android-21/arch-arm64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libMobileNativeCoreSharedLib.so -o ../../../../build/intermediates/cmake/prodDebug/obj/arm64-v8a/libMobileNativeCoreSharedLib.so ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/LocationExpert.cpp.o ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/ElasticGPS.cpp.o ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/GRRunnableHandler.cpp.o ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/DistanceCalculator.cpp.o ../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/Logger.cpp.o  -llog -latomic -lm "/android-ndk-r16/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/libgnustl_static.a" && :
../../../../mobileCore/CMakeFiles/MobileNativeCoreSharedLib.dir/DistanceCalculator.cpp.o: error adding symbols: File in wrong format
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

--- 省略了一些文件夹名称/用户名---

只有在我“刷新链接的 C++ 项目”/“清理项目”之后,应用程序才会在设备上编译、构建和安装。

这仅在将 AS 升级到 3.5 后才开始发生。

任何线索为什么? 谢谢!

【问题讨论】:

  • 你能分享你的 CMakeLists.txt 和 build.gradle 吗?这里真的不够。
  • 您可能应该升级您的 NDK。新的 Gradle 插件可能无法与 NDK r16 顺利配合。

标签: android android-studio android-ndk


【解决方案1】:

您是否使用 Android Studio 3.5 打开了旧项目?据我所知,Android Studio 3.5 有一个新的不同的原生项目结构。它将源代码和 CMakeLists 放在“app/src/main/cpp”文件夹下,旧版本工作室将 CMakeLists 放在“app/”下,源代码放在“app/src/main/jni”下。您可以尝试使用 Android Studio 3.5 创建一个空的原生项目,并以与这个空的原生项目相同的方式放置您的代码。

【讨论】:

  • 您好,很抱歉回复晚了,我尝试了您的建议。将所有内容移至 /main/cpp,与示例项目的操作方式相同,但我仍然遇到相同的错误。
【解决方案2】:

所以最终我收集到,在调试期间为 arm64-v8a 构建的内容在 AS 3.5 中由于某种原因而停止正常运行。

所以作为发布版本的修复,我只是使用

ndk {
    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64
}

ndk {
        abiFilters 'armeabi-v7a', 'x86', 'x86_64
    }

用于调试构建呵呵。

也许有一天,我会调查“arm64-v8a”失败的确切原因。 无论如何,这为我解决了问题:)

【讨论】:

  • 我可以在其中添加你的脚本' externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } '
  • @engmms 我将这些添加到 buildType {} 部分。发布构建类型获取第一个,调试构建类型获取第二个。
猜你喜欢
  • 2022-08-24
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多