Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

34 | 如何理解Flutter的编译模式?

使用Flutter提供的编译选项构建不同配置的安装包
在应用内获取配置数据
创建不同的应用入口文件
使用InheritedWidget封装可配置部分
使用kReleaseMode常量判断当前编译模式
在Debug模式下执行特定代码
支持跟踪和一些最低限度的依赖
与Release模式类似
优化应用启动、代码执行和二进制包大小
关闭所有断言和大部分调试信息
适用于线上发布
Dart的AOT模式
支持热重载
打开所有断言和调试信息
适用于开发阶段
Dart的JIT模式
如何在开发环境中支持不同配置的切换?
分离配置环境的实现步骤
使用断言和编译常数识别编译模式
Debug与Release模式的区别
编译打包
读配置
配置多入口
配置抽象
通过编译常数识别
通过断言识别
Profile模式
Release模式
Debug模式
思考题
总结
分离配置环境
识别编译模式
Flutter的编译模式
Debug与Release:如何理解Flutter的编译模式?

该思维导图由 AI 生成,仅供参考

你好,我是陈航。今天,我们来聊聊 Flutter 的编译模式吧。
在开发移动应用程序时,一个 App 的完整生命周期包括开发、测试和上线 3 个阶段。在每个阶段,开发者的关注点都不一样。
比如,在开发阶段,我们希望调试尽可能方便、快速,尽可能多地提供错误上下文信息;在测试阶段,我们希望覆盖范围尽可能全面,能够具备不同配置切换能力,可以测试和验证还没有对外发布的新功能;而在发布阶段,我们则希望能够去除一切测试代码,精简调试信息,使运行速度尽可能快,代码足够安全。
这就要求开发者在构建移动应用时,不仅要在工程内提前准备多份配置环境,还要利用编译器提供的编译选项,打包出符合不同阶段优化需求的 App。
对于 Flutter 来说,它既支持常见的 Debug、Release 等工程物理层面的编译模式,也支持在工程内提供多种配置环境入口。今天,我们就来学习一下 Flutter 提供的编译模式,以及如何在 App 中引用开发环境和生产环境,使得我们在不破坏任何生产环境代码的情况下,能够测试处于开发期的新功能。

Flutter 的编译模式

Flutter 支持 3 种运行模式,包括 Debug、Release 和 Profile。在编译时,这三种模式是完全独立的。首先,我们先来看看这 3 种模式的具体含义吧。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flutter的编译模式包括Debug、Release和Profile三种运行模式,分别适用于开发、测试和发布阶段。Debug模式支持快速开发和运行,包括断言、调试信息和热重载;Release模式则优化了应用启动速度、代码执行和二进制包大小,适用于线上发布。在开发中,可以通过断言和Dart提供的编译常数来识别当前的编译模式,从而实现针对不同模式的代码执行行为。 文章介绍了如何在Flutter应用中引用开发环境和生产环境,以便在不破坏生产环境代码的情况下测试开发期的新功能。通过抽象配置、配置多入口、读配置和编译打包等步骤,读者可以了解如何实现分离配置环境。通过InheritedWidget对可配置部分进行封装抽象,为应用的启动注入配置环境,实现了定制化的功能。 此外,文章还介绍了如何利用Flutter提供的编译选项,构建出不同配置的安装包。同时,读者还可以在Android Studio中为应用程序创建不同的启动配置,通过Flutter插件为main_dev.dart增加启动入口,实现在不同的启动入口中切换和运行应用程序。 总的来说,本文通过介绍Flutter编译模式的特点和分离配置环境的实现步骤,帮助读者了解了如何在Flutter应用中灵活应用不同的编译模式和配置环境,从而更好地进行开发和测试工作。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 渐醒AINY
    老师讲的很棒,帮助了我很多,我的一个Flutter项目也制作完成,并上架发布了

    作者回复: 厉害👍

    2019-10-18
    8
  • Geek_082580
    对于一个 flutter module 工程, 即需要嵌入到已有 Android 项目,又需要单独运行调试,在这两种状态下需要不同的配置,比如不同的 plugin,请问老师有什么好的办法吗?

    作者回复: 用InheritedWidget配置多入口就可以了吧

    2019-09-15
    2
    3
  • liyuan
    仅仅通过-t能配置的参数还是太弱了,如果有dev,qa,uat,prod等多个环境,每个环境的app应用名称/图标可能有差别,同时希望手机上多个环境的app共存 android可以用build flavor实现,ios应该怎么做比较好?

    作者回复: 之前有讲过,Flutter只能接管引擎初始化以后的行为(运行时),像app名称、图标、启动图这些还是需要原生工程去搞的。按照这个标准解答你的问题: 1、dev,qa,uat,prod等多个环境可以在flutter工程里通过指定工程入口搞定 2、原生工程相关的配置差异,iOS可以采用多个build target方式实现。

    2019-10-07
    2
  • 矮个子先生😝
    看到过另外一种判断方法:bool.fromEnvironment('dart.vm.product')

    作者回复: 你可以点击kReleaseMode查看其声明,这两种方式是一样的

    2019-09-23
    2
    1
  • hz
    var config = AppConfig.of(context); 获取配置的时候需要context作为参数,在build方法里面就可以方便获得配置。在其他地方没有context作为参数的时候,需要获取配置应该怎么获取

    作者回复: 坦白讲以InheritedWidget的方式传递数据,其原理就是基于Widget树的,所以如果获取不到Widget树上下文,就拿不到数据

    2019-09-16
    2
    1
  • 和小胖
    思考题:老师我的理解是直接再 new 一个 AppConfig 出来传入不同的参数不就好了吗?只是相当于我们有多种开发的 config,有几种就配置几个 AppConfig 可以吗?

    作者回复: 恩,加一个开关就好,本质上跟切换主题类似

    2019-10-23
  • 火腿
    配置信息可以写到json或其它格式的本地文件里, 启动时读取配置信息。 或者把配置文件放到远程,可以实现动态加载样式或模块,本地有默认的配置, 以防网络不可用。
    2019-12-26
    3
  • 。。。。。。
    InheritedWidget 麻烦问一下如何能脱离了context 来使用呢?
    2020-05-16
    1
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部