[Flutter]环境判断

news2024/12/24 20:09:58

方式一(推荐)

常量kReleaseMode,它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于'dart.vm.product'这个特定的环境变量,它是由Dart VM设置的,用来标明当前是否在产品环境下运行。

  • 当应用以Release模式编译时(例如运行flutter build apk或flutter build ios),kReleaseMode会被设置为true。

  • 当应用在Debug模式或Profile模式下运行时,kReleaseMode会被设置为false。

kReleaseMode是foundation库的一部分,这意味着你不需要手动定义它,可以直接使用。这个变量与其他几个常量一起,帮助开发者编写依赖于构建模式的代码:

  • kDebugMode: 当应用在Debug模式下运行时为true。

  • kProfileMode: 当应用在Profile模式下运行时为true。

  • kReleaseMode: 当应用在Release模式下运行时为true。

// const bool kReleaseMode = bool.fromEnvironment('dart.vm.product');
if (kReleaseMode) {
  print("dart.vm.product-现在是release环境.");
} else {
  print("dart.vm.product-现在是debug环境.");
}

1.在Main.dart选择Start Debugging运行

还用Android Studio和Xcode运行一样默认会是debug环境

打印结果:

I/flutter (23746): dart.vm.product-现在是debug环境.

2.使用flutter run运行

$ flutter run

打印结果:

I/flutter (24584): dart.vm.product-现在是debug环境.

3.使用flutter run --debug运行

$ flutter run --debug

打印结果:

I/flutter (30485): dart.vm.product-现在是debug环境.

4.在终端使用flutter run --release运行

$ flutter run --release

打印结果:

I/flutter (26343): dart.vm.product-现在是release环境.

5.使用flutter build apk打包安装

$ flutter build apk

提示:

dart.vm.product-现在是release环境.

6.使用flutter build apk --debug打包安装

$ flutter build apk --debug

提示:

dart.vm.product-现在是debug环境.

7.打包debug或release的ipa用Xcode打开项目操作

在Xcode中,默认情况下运行或构建应用会使用Debug配置,这意味着如果你直接通过Xcode的运行按钮(通常是顶部左侧的一个播放按钮)启动应用,它将默认使用Debug模式。这也意味着你的kReleaseMode将会是false。

如果你想要通过Xcode显式地打包一个Debug模式的ipa文件,你可以遵循以下步骤:

  • 打开你的Flutter项目中的ios文件夹。你可以在终端使用open ios/Runner.xcworkspace命令来打开Xcode项目,或者直接在Finder中找到Runner.xcworkspace文件并双击打开。

  • 确保你的设备或者是一个有效的模拟器是当前选中的目标设备。

  • 前往Xcode的顶部菜单栏,选择Product > Scheme > Edit Scheme。

  • 在左侧菜单中选择Archive,然后在右侧的Build Configuration中选择Debug。(左侧选择Run的话,就是修改运行后的安装包环境)

  • 关闭Scheme编辑器,然后去到Product > Archive来创建一个新的归档。   注意:归档操作通常用于准备Release模式的构建,但是你可以改变Scheme设置来创建Debug模式的归档。

  • 一旦归档完成,Xcode的Organizer窗口会打开,显示你的新归档。

  • 在Organizer中,选择你的归档,然后点击右边的Export按钮来导出ipa文件。

  • 在导出流程中,确保选择正确的导出选项,比如Development来保持Debug模式。

在这个过程完成后,你将会得到一个Debug模式的ipa文件,它包含了调试符号和不是针对性能优化的编译。你可以将这个ipa文件安装到你的设备上,用于测试目的。记住Debug模式的构建并不适合发布到App Store或其他分发渠道。

最后,不管是通过Xcode还是通过命令行工具,kReleaseMode的值始终由构建配置来决定,当使用Release配置构建时,kReleaseMode为true;当使用Debug配置构建时,kReleaseMode为false。

注意:经过验证,打包debug环境的ipa,安装到手机上启动不了,打包release安装没问题。

方式二

若你不想用kReleaseMode判断环境,你还可以用“ENV”甚至自定义一个变量来判断环境。

使用String.fromEnvironment('ENV')判断环境时,若编译时没用--dart-define指定环境变量(flutter run --dart-define=ENV=DEBUG 或这样 flutter build apk --dart-define=ENV=RELEASE),默认会返回空字符串。

在Flutter开发中,--dart-define是一个命令行标志,它允许开发者在编译时向 Dart 代码注入环境变量或配置数据。这使得你可以在不同的开发环境中(如开发、测试、生产)指定不同的变量值,而无需更改源代码。

下面的代码中,我们通过判断environment是否等于’DEBUG’,让环境默认为Release环境。

// 在你的代码中,确保 environment 声明前面有 const 关键字。如果没有 const,则不会在编译时查找环境变量的值,而是会默认为空字符串。
const String environment = String.fromEnvironment('ENV');
if (environment == 'DEBUG') {
  print("ENV-现在是debug环境. environment = $environment");
} else {
  print("ENV-现在是release环境. environment = $environment");
}

这种劣势也比较明显,因为需要编译时手动指定环境,开发时忘记指定--dart-define=ENV=DEBUG时,就容易误入release环境。比如你在release环境中有埋点,误入后就会制造出很多垃圾数据。

1.使用flutter run --dart-define=ENV=DEBUG运行

$ flutter run --dart-define=ENV=DEBUG
// 或者
$ flutter run --dart-define="ENV=DEBUG"

打印结果:

I/flutter (29771): ENV-现在是debug环境. environment = DEBUG

2.使用flutter build apk --dart-define=ENV=RELEASE打包安装

$ flutter build apk --dart-define=ENV=RELEASE

提示:

ENV-现在是release环境. environment = RELEASE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SnapGene 5 for Mac 分子生物学软件

SnapGene 5 for Mac是一款专为Mac操作系统设计的分子生物学软件,以其强大的功能和用户友好的界面,为科研人员提供了高效、便捷的基因克隆和分子实验设计体验。 软件下载:SnapGene 5 for Mac v5.3.1中文激活版 这款软件支持DNA构建和克隆设计&…

单摄像头、双目摄像头、多视图系统:了解自动驾驶汽车的传感器

1.鱼眼摄像机 其他摄像机的位置 2.激光雷达 3.Radar 4.sonar 声纳 各个传感器的对比 相机类型 一般来说,相机可以分为单目相机、双目相机和多视角相机。 单目相机:最常见的相机类型,只有一个镜头。双目相机:有两个镜头&…

浅谈Mysql(二)——慢sql、mysql锁、大事务的影响

一、慢sql的危害 不仅对当前查询影响大,查询时间过长;还对其他连接有影响,因为慢sql占用时间过长,导致其他线程,获取连接时间过长,进而导致网关超时等问题; 1.1 explian分析最主要看什么参数 …

20.变量的使用方式和注意事项

文章目录 一、变量的用法二、变量的注意事项三、总结 一、变量的用法 代码示例 public static void main(String[] args) {//1.基本用法// 定义变量,再进行输出int a 10;System.out.println(a);// 10System.out.println(a);// 10//2.变量参与计算int b 30;int c …

TitanIDE与传统 IDE 比较

与传统IDE的比较 TitanIDE 和传统 IDE 属于不同时代的产物,在手工作坊时代,一切都是那么的自然,开发者习惯 Windows 或 MacOS 原生 IDE。不过,随着时代的变迁,软件行业已经步入云原生时代,TitanIDE 是顺应…

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法 ro.vendor.config.lgsi.market_name拯救者平板 Y700 ro.vendor.config.lgsi.en.market_nameLegion Tab Y700 #ro.vendor.config.lgsi.short_market_name联想平板 ZUI T # B…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机,包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口,1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆车载…

macOS 13 Ventura (苹果最新系统) v13.6.6正式版

macOS 13 Ventura是苹果电脑的全新操作系统,它为用户带来了众多引人注目的新功能和改进。该系统加强了FaceTime和视频通话的体验,同时优化了邮件、Safari浏览器和日历等内置应用程序,使其更加流畅、快速和安全。特别值得一提的是,…

Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签

1 方案一&#xff1a;命令 cd <项目目录> git fetch --all git fetch --tags git remote rename origin old-origin #可以不保留 git remote add origin http://***(项目的新仓库地址) #git remote set-url origin <项目的新仓库地址> git push origin --all git…

Redis中的客户端(三)

客户端 身份验证 客户端状态的authenticated属性用于记录客户端是否通过了身份验证: typedef struct redisClient {// ...int authenticated;// ... } redisClient;如果authnticated的值为0&#xff0c;那么表示客户端未通过身份验证&#xff1b;如果authenticated的值为1&a…

【Java程序设计】【C00345】基于Springboot的船舶监造管理系统(有论文)

基于Springboot的船舶监造管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

2024/3/28 IOday1

编写一条学生链表&#xff0c;写一些能够像链表里边添加数据的函数 实现&#xff1a;将链表中的所有内容保存到文件中去 以及 读取文件中的所有内容&#xff0c;加载到链表里 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef int datat…

贪心算法--最大数

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

《米小圈动画汉字》—“动起来”汉字就能轻松记住啦!

为了迎合孩子们的兴趣&#xff0c;市面上推出了许多类型的动画片&#xff0c;所谓“动画”是让角色动起来&#xff0c;感染孩子&#xff0c;给孩子带来欢乐。但是&#xff0c;并不是所有动画片都对孩子有益&#xff0c;市面上的大多良莠不齐&#xff0c;孩子分辨不了还可能影响…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

权限提升-Win系统权限提升篇AD内网域控NetLogonADCSPACKDCCVE漏洞

知识点 1、WIN-域内用户到AD域控-CVE-2014-6324 2、WIN-域内用户到AD域控-CVE-2020-1472 3、WIN-域内用户到AD域控-CVE-2021-42287 4、WIN-域内用户到AD域控-CVE-2022-26923 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权…

vulfocus环境搭建(kali搭建)

Vulfocus 是一个漏洞集成平台&#xff0c;将漏洞环境 docker 镜像&#xff0c;放入即可使用&#xff0c;开箱即用。 安装docker环境 个人不建议随意更换apt源&#xff0c;我换了几次遇到很多问题。 apt-get update apt-get upgrade&#xff08;时间很久&#xff09; apt-get i…

C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备 医院手麻系统源码

C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备 手术麻醉信息管理系统主要还是为了手术室开发提供全面帮助的系统&#xff0c;其主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配&#xff0c;再到术前访视、术中记录及术后…

融合创新!全局注意力+局部注意力,训练成本直降91.6%

全局注意力结合局部注意力可以让模型在处理数据时&#xff0c;既不会丢失重要的局部细节&#xff0c;也能考虑到整个数据集中的全局结构&#xff0c;从而在保持模型计算效率的同时&#xff0c;提高模型的表达能力。 这种策略相较于传统的单一注意力机制&#xff0c;能够更全面…

2024最新Win系统下VSCode下载安装与配置C/C++教程

2024最新Win系统下VSCode下载安装与配置C/C教程 文章目录 2024最新Win系统下VSCode下载安装与配置C/C教程1、下载安装VSCode2、安装运行时环境GCGC的环境配置 3、安装VSCode插件4、配置程序调试环境4.1确定文件存储路径4.2新建文件夹【.vscode】4.3在.vscode文件夹里新建四个配…