Administrator
发布于 2026-08-25 / 18 阅读
0
0

系列文章《Android 工程师的 100 篇进阶笔记》第 26 篇:Android 包体积优化:Dex、资源、Assets 与混淆实战

包体积直接影响下载转化率和更新率。每多 1MB,都可能让一部分用户放弃下载。包体积优化不是一次性工作,是持续监控的过程。


一、APK / AAB 里都有什么

用 Android Studio 的 APK Analyzer 打开一个 APK,通常会看到:

  • classes.dex:编译后的字节码

  • res/:图片、布局、字符串等资源

  • assets/:原始文件

  • lib/:.so 动态库

  • resources.arsc:资源索引表

  • META-INF/:签名信息

优化要分门别类,不能一刀切。


二、Dex 优化

  1. 开启 R8 压缩和混淆

android {
    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
}
  1. 启用 Dex 分包优化

android {
    packagingOptions {
        dex {
            useLegacyPackaging = false
        }
    }
}
  1. 减少依赖:没用的库及时移除,能用官方库就不用第三方库。


三、资源优化

android {
    buildFeatures {
        resValues = false
        shaders = false
    }
}
  • 用 WebP 替代 PNG/JPEG

  • 只保留需要的屏幕密度

  • 移除未使用资源:shrinkResources true

  • 矢量图替代多份位图

  • 语言资源只打包需要的:resConfigs "zh", "en"


四、Assets 与 so 库

  • 大文件放云端按需下载

  • so 库按 ABI 分包,AAB 会自动处理

  • 能静态链接的不要动态链接多余库

android {
    defaultConfig {
        ndk {
            abiFilters += setOf("arm64-v8a", "armeabi-v7a")
        }
    }
}

五、监控包体积

  1. CI 里记录每次构建大小

  2. 用 APK Analyzer 对比版本差异

  3. 设置阈值告警,超过 1MB 自动通知

  4. 定期清理无用资源和依赖


小结

  1. 包体积优化要按 Dex、资源、Assets、so 分类处理

  2. R8 混淆和 shrinkResources 是基本操作

  3. WebP、矢量图、resConfigs 能显著减小资源体积

  4. 持续监控,防止体积回弹

下一篇,我们聊聊网络优化:连接复用、缓存与弱网适配。


参考阅读

引用链接

[1]APK Analyzer: https://developer.android.com/studio/debug/apk-analyzer

[2]Shrink, obfuscate, and optimize your app: https://developer.android.com/studio/build/shrink-code


评论