【问题标题】:How to disable all Logs [debugPrint()] in release build in flutter?如何在 Flutter 中禁用发布版本中的所有日志 [debugPrint()]?
【发布时间】:2018-03-25 11:56:01
【问题描述】:

我已经在 android 设备中安装了 release build apk,但是如果我将该设备连接到 Android studio,那么我可以看到所有 Logs/debugPrint 语句。

有没有办法禁用所有日志?

【问题讨论】:

    标签: android logging flutter debug-print


    【解决方案1】:

    我将接受的答案与来自here 的想法结合起来,并使用它 main.dart 使所有 debugPrint 无处不在。

    const bool isProduction = bool.fromEnvironment('dart.vm.product');
    void main() {
      if (isProduction) {      
          // analyser does not like empty function body
          // debugPrint = (String message, {int wrapWidth}) {};
          // so i changed it to this:
          debugPrint = (String? message, {int? wrapWidth}) => null;
    
      } 
      runApp(
        MyApp()
      );
    }
    

    【讨论】:

    • 您提供的链接无效。获取页面未找到错误。
    • 我修复了链接。不知道之前出了什么问题:(
    • @Sebastian 我想你总是检查 bool kDebugMode/kReleaseMode 这是 Flutter 基金会提供的常量。
    • 编译器会删除所有对什么都不做的函数的调用吗?
    • 我对此一无所知,但这里提到它确实如此:stackoverflow.com/questions/53256139/…
    【解决方案2】:

    您可以将虚拟函数分配给全局 debugPrint 变量:

    import 'package:flutter/material.dart';
    
    main() {
      debugPrint = (String message, {int wrapWidth}) {};
    }
    

    【讨论】:

    • 我怎样才能检查构建变体,以便只有在为生产编译时才能做到这一点?我不喜欢这个解决方案:stackoverflow.com/questions/47438564/…,我不想使用 simple_preprocessor 之类的包。
    • 我认为链接的 SO 质疑我们要走的路。您还可以创建一个构建脚本,在调用 flutter build ... 之前修改源文件
    • 不知道,但谢谢。我会期待这种自定义构建脚本的方式。如果您已经有一些链接,我们将不胜感激;)
    • 您可以使用简单的 shell 脚本或 bash 脚本。我有一个项目,我在其中复制了一个不同的 Dart 文件,其中包含一些在构建之前导入到某个位置的配置值。这样我就不需要修改文件内容了
    • 我会进一步研究这个话题。也许我会发布一个具体的问题。现在赞成你的答案! ;)
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2020-03-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多