Flutter在编译发布时是否删除调试模式代码



我想知道像下面这样直接将密码放在Dart代码中是否安全。Flutter在编译代码以供发布时会删除代码吗?当然,我想确保代码不能被反编译,这样就可以提取用户名和密码。

bool get isInDebugMode {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
if(inDebugMode){
emailController.text = 'random@email.com';
passwordController.text = 'secret';
}

您提供的代码不会被树摇动。因为isInDebugMode不是常数。

相反,你可以这样使用assert

assert(() {
emailController.text = 'random@email.com';
passwordController.text = 'secret';
return true;
}());

inDebugMode是常量值时,树抖动会删除该代码。

"安全"是一个强有力的词,即使当树摇动删除代码时也是如此
您可能会犯一个错误,导致树抖动以保留代码
您可能会将代码提交给CVS repo
。。。

你可以使用

  • 常量值
const bool isProduction = bool.fromEnvironment('dart.vm.product');
if(isProduction) {
...
}
  • 具有flutter run -t lib/debug_main.dart的不同lib/main.dart文件

  • 或者前面提到的断言方法(另请参阅如何排除调试代码(

最新更新