Flutter引入依赖后,应用包体积受全量依赖包还是仅导入文件影响?
Flutter 依赖导入与包体积的关系
编译后的正式包体积不会受整个依赖包的体积影响,仅会包含你实际用到的代码部分,具体逻辑如下:
- Dart 编译器在 Release 模式下默认开启 树抖动(Tree Shaking) 优化,会自动剔除所有没有被引用的代码,第三方依赖包的未引用代码也会被直接裁剪掉。你仅导入了
package:some_package/some_file.dart的话,最终只会打包该文件中你实际调用的代码,以及这部分代码依赖的其他关联代码,不会把整个some_package的所有Dart代码打进安装包。 - 例外情况分为两类:
- Debug 模式编译时不会开启树抖动优化,开发阶段的Debug包会包含整个依赖包的内容,但Debug包仅用于开发调试,不会用于正式上架。
- 如果该依赖包含原生平台(Android/iOS)的实现代码,Dart层的树抖动无法处理原生代码部分,你需要开启对应平台的代码裁剪配置(比如Android开启R8混淆、iOS开启Dead Code Stripping),才能把未使用的原生代码也裁剪掉,否则原生部分的代码可能会全量引入安装包。
内容的提问来源于stack exchange,提问作者rksilvergreen
相关产品推荐
相关产品推荐

