APK中libs文件夹过大(约42MB)的优化解决方案咨询
首先明确:com.google.code.gson:gson:2.9.0本身体积仅几百KB,libs文件夹的42MB占用几乎全部来自com.github.mhiew:android-pdf-viewer:3.2.0-beta.1——该库依赖了多架构的PDFium原生so库,是体积膨胀的核心原因。以下是针对性优化方案:
一、针对PDF Viewer库的核心优化
1. 只保留必要的CPU架构
默认情况下,该库会打包支持所有主流CPU架构的so文件(armeabi-v7a、arm64-v8a、x86、x86_64),但国内绝大多数设备仅需要前两种架构。在app模块的build.gradle中添加配置,过滤掉不需要的架构:
android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a' } } }
此操作可直接砍掉约一半的so体积。
2. 替换为系统原生PDF渲染方案
如果你的PDF需求仅为基础展示(无复杂标注、编辑等交互),可以直接移除第三方PDF库,改用Android系统自带的PdfRenderer类(API 21+支持)。它完全依赖系统API,无需额外引入库,彻底消除该部分体积占用。注意:PdfRenderer不支持加密PDF,需确认你的业务场景是否符合。
3. 切换到稳定正式版
你当前使用的是beta版本,可能包含调试代码、冗余依赖或未优化的资源。尝试切换到该库的稳定正式版(如3.2.0正式版,若已发布),通常正式版会做体积裁剪和性能优化。
二、针对Gson的辅助优化(影响较小)
开启R8/ProGuard混淆压缩,移除Gson中未被使用的代码。需在混淆规则文件中保留必要的类,避免解析异常:
-keep class com.google.gson.** { *; } -keep class com.google.gson.annotations.** { *; } -keep class 你的实体类包路径.** { *; } // 保留你用Gson解析的业务实体类
三、通用APK体积压缩手段
1. 启用Android App Bundle发布
改用App Bundle格式上传到应用商店,Google Play会根据用户设备的架构、语言等生成针对性的APK,用户仅下载自己需要的资源和so文件,既能大幅降低用户实际下载体积,也能优化本地APK包的大小。
2. 自动移除未使用资源和代码
在release构建中开启资源收缩和代码混淆:
android { buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
此配置会自动移除未被引用的资源、类和方法,进一步压缩libs及整体APK体积。
内容的提问来源于stack exchange,提问作者Zeeshan Ahmed

