Android 每次构建应用程序时,studio 3.5 都需要刷新链接的 C++ 项目
Android studio 3.5 requires Refresh Linked C++ project each time I build the app
自从我更新到 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.
--- 省略了一些文件夹 names/user 名称 ---
只有在我"Refresh linked C++ projects" / "Clean project"之后,应用程序才会在设备上编译、构建和安装。
只有在将 AS 升级到 3.5 后才开始出现这种情况。
有什么线索吗?
谢谢!
您是否使用 Android Studio 3.5 打开您的旧项目?据我所知,Android studio 3.5 有一个新的不同的本地项目结构。它将源代码和 CMakeLists 都放在 "app/src/main/cpp" 文件夹下,旧版本工作室将 CMakeLists 放在 "app/" 下,将源代码放在 "app/src/main/jni" 下。您可以尝试使用 Android Studio 3.5 创建一个空的原生项目,并以与这个空的原生项目相同的方式放置您的代码。
所以最终我发现在调试期间为 arm64-v8a 构建由于某种原因在 AS 3.5 中停止正常运行。
因此,作为发布版本的修复,我只是使用
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64
}
和
ndk {
abiFilters 'armeabi-v7a', 'x86', 'x86_64
}
用于调试构建嘿。
也许有一天,我会调查 'arm64-v8a' 失败的确切原因。
无论如何,这解决了我的问题:)
自从我更新到 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.
--- 省略了一些文件夹 names/user 名称 ---
只有在我"Refresh linked C++ projects" / "Clean project"之后,应用程序才会在设备上编译、构建和安装。
只有在将 AS 升级到 3.5 后才开始出现这种情况。
有什么线索吗? 谢谢!
您是否使用 Android Studio 3.5 打开您的旧项目?据我所知,Android studio 3.5 有一个新的不同的本地项目结构。它将源代码和 CMakeLists 都放在 "app/src/main/cpp" 文件夹下,旧版本工作室将 CMakeLists 放在 "app/" 下,将源代码放在 "app/src/main/jni" 下。您可以尝试使用 Android Studio 3.5 创建一个空的原生项目,并以与这个空的原生项目相同的方式放置您的代码。
所以最终我发现在调试期间为 arm64-v8a 构建由于某种原因在 AS 3.5 中停止正常运行。
因此,作为发布版本的修复,我只是使用
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64
}
和
ndk {
abiFilters 'armeabi-v7a', 'x86', 'x86_64
}
用于调试构建嘿。
也许有一天,我会调查 'arm64-v8a' 失败的确切原因。 无论如何,这解决了我的问题:)