面向大型社交 App 的「Android 包体积优化全项清单」
从 资源、代码、架构、构建、第三方、动态化、多端差异化 尽可能全面的梳理
Android 包体积优化全项清单(大中型社交项目)
一、资源(Res)级优化
1. 图片资源优化(高收益)
- 全部转 WebP(有损):头像框、礼物、背景等非 UI 标准图;质量控制在 70%~90%。
- 使用 WebP(无损)替代 PNG:UI 图标、有透明区域的图片。
- SVG / VectorDrawable 代替 PNG:纯矢量图标,用
android:src或<vector>,对 Android 版图标收益巨大。 - 大图自动切分缩略图:用于预览的大图生成 200px 缩略图,减少 bundle 中原图体积。
- 移除未使用的图片资源:结合 lint、Gradle
unused resources、内部打点统计。 - 按屏幕密度裁剪资源:xxhdpi/xxxhdpi 按需分包,小密度设备不需要高密度资源。
2. 字体优化
- 只导入必要字体:减少完整字体文件(Roboto/SourceHanSans 常常 15~20 MB)。
- 字体子集化(subset):针对 UI 文案生成精简字体(非常大收益)。
- 动态加载字体或使用 WebFont。
3. Raw / Assets 优化
- Assets 内资源进行拆分 32/64(你提到的方向正确)。
- 资源包按功能模块拆成 zip / bundle,运行时解压。
- 音频文件转 AAC/MP3,控制码率。
- 移除开发遗留资源:H5 离线包、测试用文件、json mock 数据等。
二、Native(SO 库)优化
1. 架构拆分
- 只保留 arm64-v8a(建议),放弃 32 位可以减少 40%~50% 体积。
若不能放弃,则至少: - arm64 / armeabi-v7a 分离打包(ABI splits)。
2. 精简 SO
- strip 调试符号 (
-Wl,--strip-all) - 开启 LTO(链接时优化)
- SO 依赖裁剪(ffmpeg / opencv 类巨型库)
- 去掉未用的 decoder、filter、protocol
- 仅编译所需模块(如礼物合成可只保留两个编码器)
3. 合并 SO
多个小 SO 合并可减少 .so header 开销:
lib_feature1.so (80K)
lib_feature2.so (90K)
-> merge -> lib_features.so (120K)
4. 通过插件系统动态下载 SO
社交类项目常用的:
- 音视频 SO(RTC/推流)
- 美颜 SO
- AR/滤镜 SO
⇒ 按需下载,首包极大减少。
三、JAVA/Kotlin 代码优化
1. R8/ProGuard 全面开启(高收益)
- 删除无用类、方法、字段
- inline 函数
- shrink resources
- 反射 keep 规则精准化(很多团队错误保留过多类)
2. 避免方法数爆炸
- 使用 Kotlin
-Xjvm-default、inline控制方法增量 - 移除不必要的开源库(Glide/Fresco 双框架共存等情况)
3. 减少 MultiDex Overhead
- 业务模块拆分
- 主 dex keep 精准
四、动态化与插件化(社交 App 大收益)
1. 功能模块插件化 / 按需下载
典型模块:
- 直播间
- 短视频
- 钱包、会员
- 礼物面板
- 游戏中心
- AR 特效
平时用户未必会用到,可以动态加载。
2. H5 / 小程序替代部分功能
如活动页、商城、引导等不需要写原生页面。
3. AB Test / 灰度功能动态下发
减少 App 包内的冗余逻辑,按需生成配置执行。
五、第三方 SDK 优化
1. 核心点:移除未使用的 SDK 模块
例如:
- Firebase analytics vs 自研统计,只留一套
- Bugly 只要 crash,不要升级、性能模块
- 播放器 SDK 去掉 DRM / HLS / DASH 不用的特性
- 地图 SDK 只集成基础包
2. 定制裁剪第三方 SDK(ROI 很大)
如:
- IM SDK 可裁剪:群资料、关系链、话题等拓展功能
- RTC SDK 可裁剪:录制模块、多人模式、屏幕分享等
- 图片库 去掉 GIF 支持、视频帧剪裁支持等不必要能力
3. 替换重量级库
- Glide → Coil(更轻)
- OkHttp 日志拦截器避免带 debug 版
- Gson → Moshi / Kotlinx Serialization(更轻更快)
六、构建层优化(Gradle)
1. 打开 Resource Shrink(必做)
android {
buildTypes {
release {
shrinkResources true
minifyEnabled true
}
}
}
2. 开启压缩
- AAPT2 ≤ 1.5MB
zipalignandroid:extractNativeLibs="false"(减少约 8% Native 展开体积)
3. dex 压缩
开启:
android.enableDexingArtifactTransform.desugaring=false
结合 R8 优化代码。
4. 多渠道打包差异文件裁剪
用 placeholder 替换渠道图片资源。
七、模块化架构层优化
1. 业务模块按需初始化(减少代码 & 避免资源加载)
典型优化:
- IM 初始化 → 根据用户是否使用聊天
- 推流初始化 → 进入直播间再加载
- 礼物资源 → 用 zip 在线下载
2. 移除测试开关、无用常量、硬编码文件(很多团队会忘)
八、网络资源下发替代内置资源
适合社交类:
- 礼物动效(SVGA / Lottie)外置 CDN
- 话题广场图片
- 活动 banner
- H5 离线包(在线动态下发)
- 表情包(常驻 2~3 套,其他在线下载)
九、Apk/AAB 增强优化方案
1. 使用 App Bundle(AAB)(必做)
Google Play 会自动裁剪:
- 屏幕密度
- ABI
- 语言资源
可减少 20%~40%。
2. 分语言资源(语言 splits)
如果你支持 20+ 语言,这点收益巨大。
十、调试 & 监控体系
1. 建立包体积 Dashboard(你们内部也需要一个)
维度包括:
- 总包体积
- 每次构建差异
- 历史趋势
- 模块体积分布
- 第三方依赖体积占比
- 图片大小排行榜
2. 引入 AAPT / apktool 分析工具
- 找出新增资源
- 未使用资源
- 多余语言 / 多余屏幕密度文件
整体方案
下面是你可以直接提报专项的纲要:
P0(立刻做,收益巨大)
- 全量资源 WebP 化
- 动态加载礼物包、美颜包、音视频 SO
- 启用 AAB、资源 shrink、R8
- 移除未使用资源 & 废弃第三方库
- SO 架构裁剪(能只留 arm64-v8a 最好)
P1(中期做)
- 资产/动态化加载
- 字体子集化
- 第三方 SDK 模块裁剪
- 业务模块“按需初始化 + 按需下载”
P2(长期优化)
- 业务插件化
- 功能模块差异化下发(灰度/AB)
- 构建流水线体积监控体系完善
- 持续第三方库替换(如 Glide → Coil)