Flutter崩溃报告插件flutter_bugly_latest的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter崩溃报告插件flutter_bugly_latest的使用


简介

flutter_bugly_latest 是一个用于收集 Android 和 iOS 应用程序崩溃报告的 Flutter 插件。它支持原生异常上报和 Flutter 异常上报,并且兼容官方最新 SDK 功能,无需担心 Google 关联问题。

pub package Gitter


一、引入插件

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_bugly_latest: lastVersion

或者通过 Git 仓库引入:

dependencies:
  flutter_bugly_latest:
    git:
      url: git@github.com:zuiaijj/flutter_bugly_latest.git
      ref: main

二、项目配置

android/app/build.gradleandroid 配置块中添加以下内容:

lintOptions {
    // 解决打包时出现的 lint 问题
    checkReleaseBuilds false
}

defaultConfig {
    ndk {
        // 设置支持的 SO 库架构
        abiFilters 'armeabi-v7a'//, 'arm64-v8a', 'x86', 'x86_64'
    }
}

三、使用插件

初始化插件并启用 Flutter 异常捕获:

import 'package:flutter_bugly/flutter_bugly.dart';

void main() => FlutterBugly.postCatchedException(() {
      runApp(MyApp());
    });

FlutterBugly.init(
  androidAppId: "your android app id",
  iOSAppId: "your iOS app id",
);

四、Release 打包(Android)

生成 64 位 APK:

flutter build apk --release --target-platform android-arm64

生成 32 位 APK(推荐配合 armeabi-v7a 使用):

flutter build apk --release --target-platform android-arm

五、支持的属性(Android)

以下是插件支持的主要属性:

String channel, // 自定义渠道标识
bool autoCheckUpgrade = true, // 自动检查更新开关
bool autoInit = true, // 自动初始化
bool autoDownloadOnWifi = false, // WiFi 下自动下载开关
bool enableNotification = false, // 通知栏开关
bool showInterruptedStrategy = true, // 打断策略开关
bool canShowApkInfo = true, // 显示 APK 信息开关
bool customUpgrade = true, // 是否使用自定义弹窗
int initDelay = 0, // 初始化延迟时间(秒)
int upgradeCheckPeriod = 0, // 升级检查周期(秒)

// 手动检查更新
void checkUpgrade({
  bool isManual = false, // 是否手动触发检查
  bool isSilence = false, // 是否静默检查(不显示弹窗或 toast)
})
void setUserId(String userId); // 设置用户 ID
void putUserData({String key, String value}); // 添加用户数据
void setUserTag(int tag); // 设置用户标签

六、自定义弹窗(Android)

通过 FlutterBugly.getUpgradeInfo() 获取更新策略信息,并手动弹窗展示:

UpgradeInfo info = await FlutterBugly.getUpgradeInfo();
if (info != null) {
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: Text(info.title),
      content: Column(
        children: [
          Text(info.newFeature),
          Text("版本号: ${info.versionName}"),
        ],
      ),
      actions: [
        TextButton(
          onPressed: () {
            // 下载 APK
            launchUrl(Uri.parse(info.apkUrl));
          },
          child: Text("立即更新"),
        ),
      ],
    ),
  );
}

七、说明(Android)

异常上报说明
  1. Flutter 异常上报 不属于崩溃,因此需要在【错误分析】选项卡中查看:

  2. iOS 异常上报 测试不足,如遇问题请提交 Issue。

已知问题
  • 第一次接收到更新策略后,不会弹窗,需退出应用重新进入。
  • 官方未适配 8.0 Notification,如需使用请自行实现业务逻辑。
  • targetSdkVersion 26 以上请勿启用 autoDownloadOnWifi,否则可能导致更新策略失效。
  • 使用 androidx 包时,请配合 getUpgradeInfo()checkUpgrade() 方法自定义弹窗。

示例代码

以下是一个完整的示例代码,展示了如何集成和使用插件:

import 'package:flutter/material.dart';
import 'package:flutter_bugly/flutter_bugly.dart';

void main() => FlutterBugly.postCatchedException(
      () => runApp(MyApp()),
      debugUpload: true,
    );

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  State<StatefulWidget> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _platformVersion = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
    FlutterBugly.init(
      androidAppId: "your android app id",
      iOSAppId: "your iOS app id",
    ).then((result) {
      setState(() {
        _platformVersion = result.message;
      });
    });
    FlutterBugly.setUserId("user id");
    FlutterBugly.putUserData(key: "key", value: "value");
    int tag = 9527;
    FlutterBugly.setUserTag(tag);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Bugly Example'),
      ),
      body: Center(
        child: Text('初始化结果: $_platformVersion\n'),
      ),
    );
  }
}

更多关于Flutter崩溃报告插件flutter_bugly_latest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter崩溃报告插件flutter_bugly_latest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_bugly_latest 是一个用于 Flutter 应用的崩溃报告插件,它集成了腾讯的 Bugly 服务,可以帮助开发者捕获应用中的崩溃信息,并提供详细的崩溃报告。以下是使用 flutter_bugly_latest 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_bugly_latest 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_bugly_latest: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 Bugly

在你的 Flutter 应用中初始化 Bugly。通常可以在 main.dart 文件中进行初始化:

import 'package:flutter/material.dart';
import 'package:flutter_bugly_latest/flutter_bugly.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Bugly
  await FlutterBugly.init(
    androidAppId: 'your_android_app_id',  // 替换为你的 Android App ID
    iOSAppId: 'your_ios_app_id',        // 替换为你的 iOS App ID
    debugMode: true,                    // 是否开启调试模式
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Bugly Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Bugly Example'),
        ),
        body: Center(
          child: Text('Hello, Bugly!'),
        ),
      ),
    );
  }
}

3. 配置 Android 和 iOS 项目

Android 配置

android/app/build.gradle 文件中添加以下配置:

android {
    ...
    defaultConfig {
        ...
        ndk {
            // 设置支持的 SO 库架构
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }
}

iOS 配置

ios/Runner/Info.plist 文件中添加以下配置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

4. 捕获自定义异常

你可以使用 FlutterBugly 来捕获自定义异常:

try {
  // 你的代码
} catch (e, stackTrace) {
  FlutterBugly.postException(
    error: e.toString(),
    stackTrace: stackTrace.toString(),
  );
}

5. 上传用户信息(可选)

你可以上传用户信息以便在 Bugly 后台查看:

FlutterBugly.setUserId('user_id');
FlutterBugly.setUserTag('user_tag');
FlutterBugly.setUserData('user_data');

6. 测试崩溃报告

为了确保 Bugly 正常工作,你可以在代码中故意引发一个崩溃:

void triggerCrash() {
  List<int> list = [];
  print(list[1]);  // 这将引发一个越界异常
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!