面向大型社交 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-defaultinline 控制方法增量
  • 移除不必要的开源库(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
  • zipalign
  • android: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)