uni-app Android包体积过大主因是未裁剪ABI架构、未压缩图片、整包引入重型库及冗余静态资源;应精简为仅arm64-v8a、转WebP压缩图片、按需引入SDK、移除static中未用资源并改用CDN或远程加载。

为什么uni-app Android包动辄80MB+?
不是代码写得多,而是默认把所有平台资源、未裁剪的原生SDK、未压缩的图片和字体全塞进去了。Android构建默认启用x86_64、arm64-v8a、armeabi-v7a三套ABI,光一个libweibosdkcore.so在三个目录下就占12MB;static/里一张未压缩PNG可能5MB;node_modules里pdfjs-dist或three.js被整包引入,直接加码6–8MB。
删掉没用的ABI架构最立竿见影
真机99%跑在arm64-v8a上,armeabi-v7a仅需兼容极老机型(如2015年前Android 4.4设备),x86_64基本只用于模拟器。离线打包时必须显式限定目标ABI:
- 在
android/app/build.gradle中配置:ndk { abiFilters 'arm64-v8a' // 只保留这一行,注释或删掉其他 abiFilters } - 若用HBuilderX云端打包,无法控制ABI——必须切到离线打包流程
- 验证是否生效:解压APK后进入
lib/目录,应只剩arm64-v8a/一个文件夹
原生插件和SDK必须精简再集成
uni-app离线打包用的DCloud SDK本身已较轻量,但项目里叠加的第三方原生插件(如微信登录、极光推送、OCR)常带全套ABI和冗余so库。实操要点:
- 下载插件源码包后,手动删掉
libs/下非arm64-v8a的so文件,再重新导入AS工程 - 检查
android/app/src/main/jniLibs/目录,禁止存在空目录或残留旧版本so - 禁用插件里不用的功能模块:比如极光SDK若只用推送,就删掉
jpush-android_vx.x.x.jar以外的jcore多版本jar - 避免重复集成:uni-app内置了WebSocket、HTTP等能力,不要再额外引入
okhttp或socket.io-client原生版
图片、字体、JSON资源不进APK
Android包里assets/和res/下的静态资源是体积黑洞。uni-app构建会把static/全拷进assets/,哪怕你只在H5用了一张图。
- 所有图片转WebP并压缩到
50KB以内:用sharpCLI批量处理,命令示例:sharp *.png --webp-quality 75 --webp-lossless false -o ./dist/ - 字体文件(.ttf/.woff2)全部移出
static/fonts/,改用CDN加载,并在CSS中用@font-face { src: url('https://cdn.example.com/font.woff2'); } - 大JSON配置(如城市列表、词典)不要放
static/,改用uni.request按需拉取,或拆成小块存localStorage - 检查
unpackage/res/目录,确认没有意外生成的drawable-xxxhdpi位图资源——那是HBuilderX自动缩放产生的冗余
最容易被忽略的是:即使你删了static/里的图,只要某个.vue文件里还写着require('@/static/logo.png'),Webpack仍会把它打进assets/。所有静态资源引用必须彻底清理或替换成远程URL。











