Konsola git

Firebase 性能监控使用入门 (Android)

准备工作

将 Firebase 添加到您的 Android 项目(如果尚未添加)。

第 1 步:将性能监控添加到您的应用

  1. 在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中:

    apply plugin: 'com.android.application'
    // Apply the Performance Monitoring plugin to enable instrumentation
    apply plugin: 'com.google.firebase.firebase-perf'
    
    dependencies {
        // ...
    
        implementation 'com.google.firebase:firebase-core:17.0.0'
    
        // Add the dependency for the Performance Monitoring library
        implementation 'com.google.firebase:firebase-perf:18.0.0'
    }
    
  2. 在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入性能监控插件。

    buildscript {
    
        repositories {
          // Add the following repositories:
          jcenter()  // Bintray's repository
          google()   // Google's Maven repository
        }
    
        dependencies {
          // ...
    
          classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
    
          // Add the dependency for the Performance Monitoring plugin
          classpath 'com.google.firebase:perf-plugin:1.2.1'  // Performance Monitoring plugin
        }
    }
    
  3. 重新编译您的应用。

Firebase 当前正在监控自动跟踪记录HTTP/S 网络请求

第 2 步:在 Firebase 控制台中查看性能监控结果

  1. 在 Android Studio 中构建您的应用。

  2. 使用以下任一工具来测试您的应用:

    • 安装了最新映像和 Google Play 服务 15.0.0 或更高版本的 Android 模拟器

    • 安装了 Google Play 服务 15.0.0 或更高版本的测试设备。

  3. 确认性能监控结果显示在 Firebase 控制台中。

    结果通常在 12 小时内显示。

第 3 步:(可选)添加自定义跟踪记录和自定义指标

自定义跟踪记录是与您应用中某些代码相关联的性能数据的报告。要详细了解自定义跟踪记录,请参阅性能监控概览

您的应用中可以有多项自定义跟踪记录,并且可以同时运行多项自定义跟踪记录。每项自定义跟踪记录都可以设置一个或多个指标来统计应用中与性能相关的事件,这些指标与创建它们的跟踪记录相关联。

请注意,自定义跟踪记录和指标的名称必须满足以下要求:没有前导空格或尾随空格,没有前导下划线 (_) 字符,最大长度为 32 个字符。

  1. .java.kt 文件的顶部导入这些性能监控类:

    import com.google.firebase.perf.FirebasePerformance;
    import com.google.firebase.perf.metrics.Trace;
    
  2. 要启动和停止自定义跟踪记录,请使用类似于以下内容的几行代码封装要跟踪的代码(该示例使用自定义跟踪记录名称 test_trace):

    Java

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();
    
    // code that you want to trace
    
    myTrace.stop();
    

    Kotlin

    val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
    myTrace.start()
    
    // code that you want to trace
    
    myTrace.stop()
    
  3. 要添加自定义指标,请在每次发生事件时添加类似于以下内容的几行代码。例如,此自定义指标会统计应用中发生的与性能相关的事件,例如缓存命中或未命中(使用示例事件名称 item_cache_hititem_cache_miss,且数量为 1 的整数倍)。

    Java

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();
    // code that you want to trace (and log custom metrics)
    Item item = cache.fetch("item");
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1);
    } else {
        myTrace.incrementMetric("item_cache_miss", 1);
    }
    
    myTrace.stop();
    

    Kotlin

    val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
    myTrace.start()
    // code that you want to trace (and log custom metrics)
    val item = cache.fetch("item")
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1)
    } else {
        myTrace.incrementMetric("item_cache_miss", 1)
    }
    
    myTrace.stop()
    

第 4 步(可选)使用 @AddTrace 跟踪特定方法

您可以将 @AddTrace 注释添加到应用中的方法,并提供一个字符串来标识生成的自定义跟踪记录。这会使得一条跟踪记录从该方法开始时开始,在方法完成时停止。

但请注意,对于使用 @AddTrace 注释创建的自定义跟踪记录,您无法添加自定义指标。

例如,要创建一个在调用 onCreate() 方法时运行的 onCreateTrace 的跟踪记录,请使用类似于以下内容的代码:

Java

@Override
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

Kotlin

@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

第 5 步(可选)添加针对特定网络请求的监控功能

Firebase 性能监控会自动收集网络请求。虽然此操作会收集您的应用的大多数网络请求,但系统可能不会报告某些请求。

要将特定网络请求纳入性能监控,请为您的应用添加以下代码:

Java

HttpMetric metric =
        FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
                FirebasePerformance.HttpMethod.GET);
final URL url = new URL("https://www.google.com");
metric.start();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try {
    DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
    outputStream.write(data);
} catch (IOException ignored) {
}
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

conn.disconnect();
metric.stop();

Kotlin

val metric = FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
        FirebasePerformance.HttpMethod.GET)
val url = URL("https://www.google.com")
metric.start()
val conn = url.openConnection() as HttpURLConnection
conn.doOutput = true
conn.setRequestProperty("Content-Type", "application/json")
try {
    val outputStream = DataOutputStream(conn.outputStream)
    outputStream.write(data)
} catch (ignored: IOException) {
}

metric.setRequestPayloadSize(data.size.toLong())
metric.setHttpResponseCode(conn.responseCode)
printStreamContent(conn.inputStream)

conn.disconnect()
metric.stop()

您通过这种方式专门捕获的 HTTP/HTTPS 网络请求会与性能监控自动捕获的网络请求一起显示在 Firebase 控制台中。

第 6 步:部署应用,然后查看结果

使用一个或多个测试设备验证性能监控后,您可以将更新后的应用版本部署给用户。

您可以在 Firebase 控制台中监控性能数据。

已知问题

  • 性能监控 Gradle 插件 v1.1.0 可能导致 Guava 依赖项不匹配,造成以下错误:

    Error:Execution failed for task ':app:packageInstantRunResourcesDebug'.
    > com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

    如果出现此错误,您可以采取以下任一措施:

    • 将性能监控插件升级到 v1.1.1 或更高版本(最新版本为 v1.2.1)。

    • 替换根级(项目级层)Gradle 文件 (build.gradle) 中的性能监控插件依赖项行,如下所示:

      buildscript {
        // ...
      
        dependencies {
          // ...
      
          // Replace the standard Performance Monitoring plugin dependency line, as follows:
          classpath ('com.google.firebase:perf-plugin:1.1.0') {
                      exclude group: 'com.google.guava', module: 'guava-jdk5'
          }
        }
      }
      
  • 性能监控仅支持监控使用 OkHttp HTTP 客户端 v3.x.x 发起的 HTTP/S 网络请求。

  • 性能监控会根据 HTTP 内容长度标头中设置的值,报告 HTTP/HTTPS 网络请求的总负载大小。此值有时可能并不准确。

  • 在多进程 Android 应用中,性能监控仅支持其中的主进程。

  • 性能监控 Gradle 插件与以下内容不兼容:

    • DexGuard,它会停用自动跟踪和 HTTP/S 网络请求监控。但是,如果您的应用使用 DexGuard,借助性能监控 SDK 添加的自定义跟踪记录会正常运行。

    • Jack,已弃用。

调试集成

您可以在构建时为性能监控启用调试日志记录功能,方法是向应用的 AndroidManifest.xml 文件添加 <meta-data> 元素,如下所示:

<application>
    <meta-data
      android:name="firebase_performance_logcat_enabled"
      android:value="true" />
</application>

您可以使用 logcat 过滤功能查看跟踪记录和 HTTP/HTTPS 网络请求日志记录。性能监控日志消息会被标记为 FirebasePerformance,您可以使用以下命令对其进行过滤:

adb logcat -s FirebasePerformance

后续步骤