本文将为您介绍如何初始化终端性能监控 Pro Bugly Flutter SDK。
初始化示例代码
在项目
main.dart 文件的 main 函数中添加初始化代码。import 'package:bugly_pro_flutter/bugly.dart';void main() {Bugly.setSdkRegion(SdkRegion.BUGLY_CLOUD); // 设置上报域名BuglyOptions options = BuglyOptions(appId: '', appKey: '', bundleId: '');options.monitorTypes = [MonitorType.launchMetric,MonitorType.looperMetric,MonitorType.looperStack,MonitorType.exception];options.userId = 'pro_tester';Bugly.init(options, appRunner: (){runApp(const MyApp());},beforeInitRunner: (options){options.appId = 'afxxxxb01'; // 注册产品的appidoptions.appKey = 'aef434ba-xxxx-xxxx-xxxx-030b10aae88b'; // 注册产品的appkeyoptions.bundleId = 'com.xxx.bundleid';});}
注意:
在初始化代码的第一行,需要调用 Bugly.setSdkRegion(SdkRegion.BUGLY_CLOUD),设置上报域名为腾讯云。
建议在用户授权《终端性能监控 Pro SDK 个人信息保护规则》 后再初始化终端性能监控 Pro SDK。
集成 FAQ
解决 Flutter 启动时的 "Zone mismatch" 错误。
错误现象:启动时出现 Dart 错误 "Zone mismatch"。
原因分析:该错误通常是因为 WidgetsFlutterBinding.ensureInitialized() 和 runApp() 方法在不同的 Zone 中执行导致的。
解决方案:确保这两个方法在同一个 Zone 中执行。
以下是正确的代码组织方式:
import 'package:bugly_pro_flutter/bugly.dart';void main() {BuglyOptions options = BuglyOptions(appId: '', appKey: '', bundleId: '');options.monitorTypes = [MonitorType.launchMetric,MonitorType.looperMetric,MonitorType.looperStack,MonitorType.exception];options.userId = 'pro_tester';WidgetsFlutterBinding.ensureInitialized();final zone = Zone.current; // !!!!!!获取zone!!!!!Bugly.init(options, appRunner: (){// runApp(const MyApp());zone.run(() => runApp(const MyApp())); // !!!!!!这里改成在zone中运行runApp!!!!!!!},beforeInitRunner: (options){options.appId = 'afxxxxb01'; // 注册产品的appidoptions.appKey = 'aef434ba-xxxx-xxxx-xxxx-030b10aae88b'; // 注册产品的appkeyoptions.bundleId = 'com.xxx.bundleid';});}
说明:
先执行 WidgetsFlutterBinding.ensureInitialized() ,并保存执行该接口的 Zone。
在 Bugly.Init 中使用前面保存的 Zone 执行 runApp(),可以保证 WidgetsFlutterBinding.ensureInitialized() 和 runApp() 在同一个 Zone 中执行。
如果有异步操作,需使用 async/await 正确处理。
解决 Android 平台编译问题
接入后如果启动 crash 报
Abort message: 'JNI DETECTED ERROR IN APPLICATION: java_class == null in call to GetStaticMethodID,且项目开启了代码混淆,需要将 Bugly 相关的类加入 keep 白名单。-keep class java.com.tencent.bugly.**{*;}
解决 iOS 平台的编译问题
当您在 iOS 原生工程(宿主工程)中集成 Flutter APM SDK 时,如果遇到 C++ 链接错误,例如 Undefined symbols for architecture arm64,提示缺少 C++ 符号,原因如下:
Bugly Future SDK 的部分逻辑是采用 C++ 实现的,因此需要宿主工程支持 C++ 运行时库。
iOS 工程的默认配置不包含 C++ 库,Xcode 新建的工程默认不会自动链接 C++ 标准库(libc++),需要手动添加。
解决方案步骤如下:
在 Xcode 中明确添加 libc++.tbd(或 libc++.dylib)依赖:
1. 打开 Xcode 工程。
双击您项目的 ios/Runner.xcworkspace(Flutter 工程)或原生工程文件。
2. 导航到构建配置,在项目导航器中执行如下操作:
2.1 选择您的 Target(通常是 Runner)。
2.2 切换到 "Build Phases" 标签页。
3. 添加 C++ 库。
3.1 找到 "Link Binary With Libraries" 部分。
3.2 单击 + 按钮,然后搜索 libc++。
3.3 选择 libc++.tbd(推荐)或 libc++.dylib(两者功能相同,.tbd 是较新的轻量版)。
4. 验证配置。在 "Build Settings" 标签页中执行如下操作:
4.1 搜索 Other Linker Flags。
4.2 确保包含 -lc++(如果手动添加过,可移除以避免重复)。
5. 重新编译。
执行
Clean Build(Cmd + Shift + K)后重新运行。