融云IM干货丨如何确保在项目中只包含一个libc++_shared.so版本?

融云IM即时通讯
• 阅读 292

确保项目中只包含一个libc++_shared.so版本的关键在于统一C++运行时,并合理配置项目的构建脚本。以下是一些具体的步骤和方法:

统一NDK版本:确保项目中所有模块使用的NDK版本一致,这有助于避免不同版本NDK生成的libc++_shared.so之间的冲突。可以在module级别的build.gradle文件中添加NDK版本约束,例如:

gradle ndkVersion "21.0.6113669" 这样可以保证C++运行时版本的一致性 。

发布AAR时排除libc++_shared.so:在发布AAR时,可以在packagingOptions中排除libc++_shared.so,避免将这个库包含在AAR包中,从而减少冲突的可能性:

gradle packagingOptions { exclude '**/libc++_shared.so' }

专门发布包含libc++_shared.so的AAR:可以创建一个专门的AAR,其中包含libc++_shared.so,供其他模块依赖,这样可以确保只有一个版本的libc++_shared.so被打包到APK中 。

在主项目中指定libc++_shared.so:在主项目的build.gradle中使用packagingOptions来指定libc++_shared.so,使用pickFirst策略来选择第一个找到的libc++_shared.so:

gradle packagingOptions { pickFirst 'lib/*/libc++_shared.so' }

使用Gradle Dependency Analyzer:Android Studio提供了Gradle Dependency Analyzer工具,可以帮助分析项目的依赖关系,识别哪些库包含了libc++_shared.so。通过这个工具,可以更直观地看到哪些模块或库可能导致了重复包含的问题,并进行相应的调整 。

避免使用STL库中的内容:在C++代码中避免使用STL库中的内容,比如std::map等,并且不使用new/delete生成和释放对象,改用malloc(calloc/realloc)/free来管理对象。在Gradle脚本中配置-DANDROID_STL=none,这样生成的产物就不带有libc++_shared.so文件了 。

静态链接C++ STL库文件:修正C++项目的构建脚本,屏蔽掉链接C++ STL动态库的指令,并在项目中的Java代码中去掉加载动态库c++_shared的代码,确保链接C++ STL的静态库文件 。

通过上述方法,可以有效地管理和控制项目中libc++_shared.so的版本,确保项目中只包含一个版本的libc++_shared.so。

点赞
收藏
评论区
推荐文章
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Linux应急响应(二):捕捉短连接
0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨 IMKit 升级过程中遇到兼容性问题怎么办?
在升级IMKitSDK过程中遇到兼容性问题时,可以采取以下措施来解决:检查新版本的变更日志:确保检查新版本的变更日志,了解有哪些API变更、功能差异以及安全机制的更新,并测试所有功能以确保兼容性。运行时判断系统版本:在应用运行时判断当前系统版本,并根据版本
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨如何测试升级后的IMKit版本是否稳定?
测试升级后的IMKit版本是否稳定,可以遵循以下步骤和建议:确保使用最新版本的SDK:始终使用融云提供的最新的SDK版本,以确保所有已知的兼容性问题都已经被修复。测试不同操作系统版本:如果可能,测试应用在不同版本的操作系统上的表现,特别是最新版本的操作系统
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨Libc++_shared.so 标准库常见问题处理方案
​针对libcshared.so标准库的常见问题,以下是一些处理方案:在build.gradle中添加去重代码,以确保不会重复包含libcshared.so文件。例如:packagingOptionspickFirst('lib/armeabiv7
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨如何检测项目中是否重复包含libc++_shared.so?
​检测项目中是否重复包含libcshared.so可以通过以下几个步骤进行:androidpackagingOptionspickFirst'lib/armeabiv7a/libcshared.so'pickFirst'lib/arm64v8a/l
融云IM即时通讯
融云IM即时通讯
Lv1
北京云中融信网络科技有限公司(简称“融云”),是全球互联网通信云服务领创品牌。2014 年由创下亿级日活神话的“飞信”核心团队组建而成,依托沉淀近 20 年的领先技术基因,开创性地将通信技术封装为 SDK 提供给开发者和企业用户,大幅降低了行业对通信功能开发的难度和成本。 自成立以来,融云专注于向开发者和企业提供专业、简单、稳定的即时通讯和实时音视频 PaaS 服务。凭借产品、技术、服务等多方面优势,融云收获了超 80 万开发者和 2200+ 国家政府机关、企事业单位的青睐,支撑起 155 万+ 应用的通信需求,覆盖社交、娱乐、游戏、教育、电商、医疗等各行业场景,并打造出一系列中企出海最佳实践案例。 在全球范围内,融云构建了一张覆盖 245 个国家及地区的通信云网络,设立了多个海外数据中心以及数千加速节点,稳定互联,确保跨地域通信体验更加流畅。基于客户业务需求,融云可提供公有云、私有云、混合云等多种部署模式。 权威咨询机构“艾瑞咨询”数据报告显示,融云即时通讯云市场份额已连续多年稳居第一。
文章
184
粉丝
0
获赞
0