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

确保项目中只包含一个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。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

VBox 启动虚拟机失败

在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

Linux应急响应(二):捕捉短连接

0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​

融云IM干货丨如何测试升级后的IMKit版本是否稳定?

测试升级后的IMKit版本是否稳定,可以遵循以下步骤和建议:确保使用最新版本的SDK:始终使用融云提供的最新的SDK版本,以确保所有已知的兼容性问题都已经被修复。测试不同操作系统版本:如果可能,测试应用在不同版本的操作系统上的表现,特别是最新版本的操作系统