Flutter SDK 接入

本文档指导开发者完成阿里云移动监控 Flutter SDK 的接入配置,包含 SDK 下载、启动、验证等核心流程,支持 Android 和 iOS 平台。

一、前提条件

  • 已完成EMAS应用创建并获取凭证

  • 开发环境要求

    Android

    • Android 5.0+

    iOS

    • Xcode 14.0+

    • iOS 12.0+

    • CocoaPods 1.12.0+

二、参考Demo

  • 移动监控 Flutter SDK接入工程样例请参见Example工程

三、将SDK添加到您的应用

  • 在项目的 pubspec.yaml 文件中添加 alicloud_apm 的依赖:

    dependencies:
      alicloud_apm: ${ApmVersion}
    重要
  • 运行 flutter pub get 完成依赖下载管理。

四、使用SDK

方式一(推荐)

import 'dart:io' show Platform;
import 'package:alicloud_apm/alicloud_apm.dart';

Future<void> main() async {
  final options = buildOptions();
  if (options != null) {
    await Apm.start(options);
  }
  
  runApp(const YourApp());
}

ApmOptions? buildOptions() {
  if (Platform.isIOS) {
    const appKey = 'Your iOS AppKey';
    const appSecret = 'Your iOS AppSecret';
    const appRsaSecret = 'Your iOS AppRsaSecret';

    return const ApmOptions(
      appKey: appKey,
      appSecret: appSecret,
      appRsaSecret: appRsaSecret,
      // 以下是可选配置项(按需替换)
      channel: 'Your Channel',
      userNick: 'Your UserNick',
      userId: 'Your UserId',
    );
  }

  if (Platform.isAndroid) {
    const appKey = 'Your Android AppKey';
    const appSecret = 'Your Android AppSecret';
    const appRsaSecret = 'Your Android AppRsaSecret';

    return const ApmOptions(
      appKey: appKey,
      appSecret: appSecret,
      appRsaSecret: appRsaSecret,
      // 以下是可选配置项(按需替换)
      channel: 'Your Channel',
      userNick: 'Your UserNick',
      userId: 'Your UserId',
    );
  }

  // 其他平台(Web、Windows、macOS、Linux 等)不启动 APM
  return null;
}

方式二

  • 以 Guarded Zone 启动

import 'dart:io' show Platform;
import 'package:alicloud_apm/alicloud_apm.dart';

Future<void> main() async {
  await Apm.runGuarded(() async {
    final options = buildOptions();
    if (options != null) {
      await Apm.start(options);
    }

    runApp(const YourApp());
  });
}

ApmOptions? buildOptions() {
  if (Platform.isIOS) {
    const appKey = 'Your iOS AppKey';
    const appSecret = 'Your iOS AppSecret';
    const appRsaSecret = 'Your iOS AppRsaSecret';

    return const ApmOptions(
      appKey: appKey,
      appSecret: appSecret,
      appRsaSecret: appRsaSecret,
      // 以下是可选配置项(按需替换)
      channel: 'Your Channel',
      userNick: 'Your UserNick',
      userId: 'Your UserId',
    );
  }

  if (Platform.isAndroid) {
    const appKey = 'Your Android AppKey';
    const appSecret = 'Your Android AppSecret';
    const appRsaSecret = 'Your Android AppRsaSecret';

    return const ApmOptions(
      appKey: appKey,
      appSecret: appSecret,
      appRsaSecret: appRsaSecret,
      // 以下是可选配置项(按需替换)
      channel: 'Your Channel',
      userNick: 'Your UserNick',
      userId: 'Your UserId',
    );
  }

  // 其他平台(Web、Windows、macOS、Linux 等)不启动 APM
  return null;
}

五、混淆配置(Android)

如果您的项目做了代码混淆,请在<project>/android/app/proguard-rules.pro保留以下混淆配置。

-keep class com.aliyun.emas.apm.**{*;}

-dontwarn com.google.auto.value.AutoValue
-dontwarn com.google.auto.value.AutoValue$Builder
-dontwarn com.alibaba.motu.crashreporter.MotuCrashReporter
-dontwarn com.alibaba.sdk.android.networkmonitor.NetworkMonitorManager
-dontwarn com.taobao.tao.log.TLogInitializer

六、接入验证

Android

  • 对于 Android,请查看 Android Studio Logcat输出,检查是否有以下日志信息:

    Apm                     I  Device unlocked: initializing Apm
    Apm-CrashAnalysis       I  Initializing Apm Crash Analysis 3.6.1 for com.aliyun.emas.apm.flutter
    Apm-CrashAnalysis       I  Initializing CrashAnalysis blocked main for 10 ms
    Apm                     I  Apm initialization successful

    此日志表明 崩溃分析SDK 在 Native 层已成功启动。

iOS

[alicloud_apm] Alicloud APM started. Package version=0.0.1

[AlicloudApmCore] Started Successfully
[AlicloudApmSetting] Fetched Successfully

此日志表明 SDK 分别在 Flutter 层和 Native 层成功启动,并且拉取配置成功。

七、扩展资料