如何在指定限制条件下减小64位APK中.so库的体积?
64位APK体积增量优化方案
以下方案均不涉及修改android:extractNativeLibs配置,符合要求:
- 拆分ABI分发
主流应用商店均支持按架构单独上传、分发对应ABI的APK包,终端用户仅会下载匹配自身设备架构的安装包,不会同时携带多架构的.so文件。build.gradle配置示例:android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a' // 按需设置需要支持的架构 universalApk false // 关闭全架构通用包生成 } } } - 裁剪冗余架构的.so文件
检查是否有第三方依赖默认引入了未指定的其他架构.so,可通过abiFilters强制只保留目标架构的文件,64位包配置示例:android { defaultConfig { ndk { abiFilters 'arm64-v8a' } } } - 优化.so库本身体积
针对自研的native代码,可通过编译选项压缩体积:- 开启
-Os编译参数,优先优化代码体积 - 开启
-fvisibility=hidden隐藏多余符号表 - 使用
strip命令剔除.so文件中的调试符号,gradle默认会对打包的.so执行strip操作,若第三方提供的.so未处理可手动执行strip
- 开启
- 裁剪冗余资源
检查64位打包是否引入了额外的冗余资源,可通过resConfigs仅保留需要的语言、dpi等资源,示例:android { defaultConfig { resConfigs "zh", "zh-rCN", "xxhdpi" // 按需调整保留的资源范围 } } - 优化第三方依赖
对比32位、64位包的文件差异,排查是否存在第三方依赖的64位.so体积远大于32位的情况,可替换为更轻量的同功能依赖,或仅引入依赖的必要功能模块,避免引入全量SDK。
内容的提问来源于stack exchange,提问作者darcy
相关产品推荐
相关产品推荐

