课程名称:Flutter从入门到进阶 实战携程网App 一网打尽核心技术
课程章节:Flutter进阶拓展:打包发布Flutter应用
课程讲师:CrazyCodeBoy
课程内容
Flutter项目优化
这一节给出了 Flutter 进行优化的一些建议:
- 通过对图片资源的压缩、使用单架构的 so 文件,来减少包体积大小;
- 按需创建页面,将耗时的计算放到单独的isolate,来提高流畅性;
- 根据控件大小加载指定分辨率的图片,通过这一方式进行图片优化;
- 通过分页加载和使用 ListView.build()来复用子控件,达到列表优化的目的;
- 为了防止内存泄露,要在 dispose()方法中对用到的 listener 进行销毁。
为了进一步进行优化,还需要了解 Flutter 的编译模式,Flutter支持Release、Profile、Debug编译模式。
- Release模式,使用AOT预编译模式,预编译为机器码,通过编译生成对应架构的代码,在用户设备上直接运行对应的机器码,运行速度快,执行性能好。此模式关闭了所有调试工具,只支持真机。
- Profile模式,和Release模式类似,使用AOT预编译模式,此模式最重要的作用是可以用DevTools来检测应用的性能,做性能调试分析。
- Debug模式,使用JIT(Just in time)即时编译技术,支持常用的开发调试功能hot reload,在开发调试时使用,包括支持的调试信息、服务扩展、Observatory、DevTools等调试工具,支持模拟器和真机。
Flutter提供了profile模式启动应用,进行性能分析,profile模式在Release模式的基础之上,为分析工具提供了少量必要的应用追踪信息。
如果是独立flutter工程可以使用flutter run --profile启动。如果是混合 Flutter 应用,在 flutter/packages/flutter_tools/gradle/flutter.gradle 的 buildModeFor 方法中将 debug 模式改为 profile即可。
Flutter项目打包发布流程
Flutter 打包发布 Android 项目
Flutter 打包发布 Android 项目的大致流程:
- 在 AndroidManifest.xml 中添加 app 名称和快照名;
- 检查和配置 build.gradle文件,主要包括 applicationId,versionCode,versionName,minSdkVersion,targetSdkVersion;
- 添加 App启动图标;
- 签名 App;
- 配置 APK 混淆文件;
- 构建一个 release 包;
- 发布到 Android 各大应用市场。
在实际的项目中,还面临多渠道打包的需求,从Flutter v1.17 开始,Flutter命令工具增加了自定义参数的功能 --dart-define,开发者可以用这个命令参数在打包或运行App 时设置参数。这样就能在Flutter代码和原生代码中获取传过来的参数,从而实现多渠道功能。
flutter run --dart-define=APP_CHANNEL=ZeroFlutter
也支持传递多组参数:
flutter run --dart-define=APP_CHANNEL=ZeroFlutter --dart-define=OTHER_VAR=Dart
在Dart 代码中的实现,注意和命令行中的参数保持一致:
class EnvironmentConfig {
static const APP_CHANNEL = String.fromEnvironment('APP_CHANNEL');
static const OTHER_VAR = String.fromEnvironment('OTHER_VAR');
}
课程总结
这一章介绍了Flutter项目的一些常用的优化手段,以及 Flutter 打包项目的发布流程,实现了从项目创建到项目发布的闭环,最后补充了实际开发中比较常用的多渠道打包的相关内容。