美文网首页FlutterFlutter
Flutter 编译模式debug和release判断

Flutter 编译模式debug和release判断

作者: calary | 来源:发表于2019-10-18 11:43 被阅读0次

一、前言

Flutter 支持 3 种运行模式,包括 Debug、Release 和Profile,我们在开发中希望debug模式下展示尽可能多的信息给我们,方便排查问题等,但是在release模式下编译的目的是最终的线上版本,给客户使用,这些信息是不需要展示的,这个时候对我们最重要的是代码尽可能快、稳定的运行,所以在release模式下我们会选择关闭打印信息等。

二、运行模式

Flutter 支持 3 种运行模式,包括 Debug、Release 和Profile,我们一般使用的是Debug和Release

  • Debug模式对应Dart的JIT模式,该模式会打开所有的断言(assert),调试信息等,并支持Hot reload(热重载),但是并没有优化代码执行速度、二进制包大小和部署,所以在debug模式下我们会感觉到卡顿,不流畅等问题
  • Release模式对应Dart的AOT模式,该模式会关闭所有断言,尽可能多的调试信息。此外还优化了应用快速启动,代码快速执行,以及二进制包的大小,所以在release模式下,才是Flutter真正的实力,非常流畅。

三、运行模式区分

  • 1、通过断言识别
  • 2、通过编译常数识别

第一种、通过断言识别
根据模式的介绍,可以知道Release模式关闭了所有的断言,因此我们可以借助断言,写出只在Debug模式下生效的代码

 assert((){
     // Do something for debug
     print('这是asset下的输出内容');
     return true;
 }());

需要注意的是,匿名函数声明调用结束时追加了小括号(),这是因为断言只能检查布尔值,这里使用括号强制执行这个始终返回true的匿名函数,以保证函数里的代码被执行

第二种、通过编译常数识别
通过断言只能写出debug模式下运行的代码,通过Dart提供的编译常数,我们还可以写出只在Release下执行的代码。Dart提供了一个布尔常量kReleaseMode,可用来判断是否Release模式

import 'package:flutter/foundation.dart';
if (kReleaseMode){ // 
      //release
}else {
     //debug
}

注意,assert的代码在打包时不会打包到二进制包中,而常数识别,debug代码虽然不会执行,但会打进二进制包中,增大包的体积

四、具体使用

  • 打印信息(print)的是否打印控制
  • 开发环境和生存环境的配置信息自动切换

自由发挥吧。。。

参考链接:

相关文章

网友评论

    本文标题:Flutter 编译模式debug和release判断

    本文链接:https://www.haomeiwen.com/subject/ruhimctx.html