Flutter判断区分Debug/Release/Profile模式
- 发表于
- flutter
framework层已经有判断编译模式的代码了,我们直接拿来用就行.
在packages/flutter/lib/src/foundation/constants.dart
中有:复制成功dart
const bool kReleaseMode = bool.fromEnvironment('dart.vm.product', defaultValue: false);
const bool kProfileMode = bool.fromEnvironment('dart.vm.profile', defaultValue: false);
const bool kDebugMode = !kReleaseMode && !kProfileMode;
const bool kIsWeb = identical(0, 0.0);
Flutter中如果需要在Debug模式下输出一些信息,或者做一些特殊的逻辑,但是Release模式下又不需要的话,就需要可以判断当前的APK或者ipa是否为debug模式.这里有两种方式可以用来判断:
使用dart.vm.product
属性
dart
/// 是否为Release模式
const bool isReleaseMode = const bool.fromEnvironment("dart.vm.product");
如果dart.vm.product
属性值为true,则为Release模式,否则不是Release模式.
但是这种方式不能用来区分Debug和Profile模式.
使用断言
dart
/// 判断是否为Debug模式
bool isDebug() {
bool inDebug = false;
assert(inDebug = true);
return inDebug;
}
Debug模式下,是可以使用断言功能的,但是Profile和Release包下,断言被禁用了,因此可以用来判断是否为Debug模式.
但是不能用于区分Profile模式和Release模式.
既然上面两种方法都没法区分profile模式,因此大概看了下源码:dart
/// List the preconfigured build options for a given build mode.
List<String> buildModeOptions(BuildMode mode) {
switch (mode) {
case BuildMode.debug:
return <String>[
'-Ddart.vm.profile=false',
'-Ddart.vm.product=false',
'--bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions',
'--enable-asserts',
];
case BuildMode.profile:
return <String>[
'-Ddart.vm.profile=true',
'-Ddart.vm.product=false',
'--bytecode-options=source-positions',
];
case BuildMode.release:
return <String>[
'-Ddart.vm.profile=false',
'-Ddart.vm.product=true',
'--bytecode-options=source-positions',
];
}
throw Exception('Unknown BuildMode: $mode');
}
从上面的代码可以看出来,我们可以使用dart.vm.profile
来判断是否为profile模式.因此得出下面完整的判断方案:
完整的方案
dart
/// 判断是否为Debug模式
bool isDebug() {
bool inDebug = false;
assert(inDebug = true);
return inDebug;
}
/// 判断编译模式
String getCompileMode() {
const bool isProfile = const bool.fromEnvironment("dart.vm.profile");
const bool isReleaseMode = const bool.fromEnvironment("dart.vm.product");
if (isDebug()) {
return "debug";
} else if (isProfile) {
return "profile";
} else if (isReleaseMode) {
return "release";
} else {
return "Unknown type";
}
}
原文连接:Flutter判断区分Debug/Release/Profile模式
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。