Flutter SDK 接入

更新时间:
复制为 MD 格式

本文档指导开发者完成阿里云移动监控 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;
}

五、配置Gradle插件(Android)

由于性能分析依赖Gradle插件在字节码中注入代码来采集性能数据,所以需要添加相关的maven仓库和gradle插件。

添加Maven仓库

<project>/android/build.gradle.kts里添加阿里云的Maven仓库。

allprojects {
    repositories {
        google()
        mavenCentral()
        //添加阿里云Maven仓库
        maven {
            url = uri("https://maven.aliyun.com/nexus/content/repositories/releases/")
        }
    }
}

<project>/android/settings.gradle.kts里添加阿里云的Maven仓库。

pluginManagement {
    ...

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
        //添加阿里云Maven仓库
        maven {
            url = uri("https://maven.aliyun.com/nexus/content/repositories/releases/")
        }
    }
}

plugins {
    ...
    // 添加移动监控的gradle插件
    id("com.aliyun.emas.apm") version "3.3.0" apply false
}

应用Gradle插件

<project>/android/app/build.gradle.kts里应用添加的插件。

plugins {
    ...
    // 应用移动监控的gradle插件
    id("com.aliyun.emas.apm")
}
重要

由于冷启动数据采集,apm插件会在Application中插桩,所以确保您的项目里有自定义Application。

六、混淆配置(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=1.1.0

[AlicloudApmCore] Started Successfully
[AlicloudApmSetting] Fetched Successfully

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

八、扩展资料