c++_shared库引入的问题
项目组提供了一个AAR文件供下游业务团队集成。
某天,下游团队反馈了一个紧急的问题,最终客户的开发者使用Android Studio打包时,构建工具提示构建失败,原因是存在重复的c++_shared库文件,建议使用pickFirst
命令来修复。
最终客户的开发者查阅了一些资料,按照帖子的建议,在项目对应的build.gradle
文件中尝试增加pickFirst
相关的指令后,问题依然存在,构建仍然失败。
检查我们项目提供的AAR包,确实存在libc++_shared.so
文件,据下游团队和最终客户的开发者反馈,他们的项目中依赖的其它AAR,也都存在libc++_shared.so
文件。
使用C++编写代码时,通常都会使用到STL,NDK针对各平台,分别提供了动态库和静态库版本,即libc++_shared.so
和``libc++_static.a。 安卓官网推荐开发者在
build.gradle中通过指定变量
ANDROID_STL的值来决定使用动态库还是静态库,即在
build.gradle`中,增加类似如下配置:
android { ... defaultConfig { ... externalNativeBuild { cmake { ... // 使用静态库 arguments "-DANDROID_STL=c++_static" // 或者使用动态库 arguments "-DANDROID_STL=c++_shared" ... } } ... } ... }
经过咨询部门内其它产品的同事,确认本问题最简洁有效的修复方案即在构建时,静态链接C++ STL的库文件。
最终的修复操作如下:
- 修正C++项目的构建脚本,屏蔽掉链接C++ STL动态库的指令。
- 修正项目中的Java代码,去掉加载动态库
c++_shared
的代码。 - 修正AAR的构建脚本,指定链接C++ STL的静态库文件。
经过上述修复操作,重新构建AAR包。检查该AAR文件,未找到libc++_shared.so
文件。
相关文件提供给下游团队,并提供给最终客户的开发者集成后,报错现象消失,通过Android Studio打包构建成功,相关功能经验证,正常可用,问题得到解决。
参考资料
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/17937700
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南