C++ SDK包大小优化实践

发表于:2020-7-01 09:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ryfdizuo    来源:CSDN

#
DoNet
分享:
  一个成熟sdk,必然要经历 压缩包大小 / 瘦身的过程。尤其以SDK的形式接入一个第三方APP中。客户方是宿主APP,对第三方sdk会提出各种苛刻要求。如果APP是top级的,比如微信,QQ,滴滴打车,美团这类,居高临下 这类要求会更加难以回绝。
  1、总揽
  包大小优化,类似减肥的过程。主要分几种:
  资源大小,图片,配置文件,字体库
  代码交付物,aar/so/.a/
  代码段
  2、资源优化
  1)图片大小,调整分辨率,或者对于可以延迟加载的走网络下载。
  2)配置文件,压缩或者二进制化,
  3)字体库尽可能裁剪掉,修改代码逻辑使用系统自带的字体。
  3、代码交付物优化
  so比.a要小很多,而且直接使用静态库集成到工程中,版本更新频繁会导致仓库空间爆掉。。尤其安卓分各种cpu架构,armeabi-v7a arm64-v8a x86_64 x86。.我们的android sdk仓库接近30G...
  3.1 代码段优化
  代码段统计方法:
  按大小排序
  size ./obj/local/armeabi-v7a/libxxx.a | awk '{print $1,$6,$8 | "$1 sort -n"}'
  统计总量
  size ./libglmaplib.a | awk '{a+=$1} END {print a}'
  优化方法
  1)模块化裁剪
  抽离成动态库,独立下载, 比较难。
  次之,通过静态宏控插拔,
  针对宏控实现模块插拔,对每个模块的改造主要两种做法:
  每个类模块的.h / .cpp 开始尾都用宏锁一层,,,改造面比较大。
  如果模块化比较好,接口层用宏控做分流,下图:
  2)模块复用
  谨记DRY原则,尽可能服用代码。。
  大的讲,比如多个三角化函数库,libtess / triangle;多个数据库 btree,sqlite,leveldb;多个图片编解码库,libpng,cute_png,stbimage。。
  小的讲,相同模式的代码段抽离成函数,增大复用率。。
  重复度,用一些代码静态扫描工具能够发现。
  3)代码层级的优化,
  宏定义用函数替代,
  代码比较多的inline函数,去内敛化
  STL的使用有所节制,
  数字字符转化用strtol/atoi/atof之类,别用sstream。避免引入ostream系列
  key为数字的尽量用数组 替换map,
  大量定义static全局对象的头文件,避免多次被引用,
  4)编译方式优化
  ndk的stl版本:stlport比c++_static 大很多。。
  C++ rtti,exception这类的去掉
  编译优化 O2

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号