转到控制台

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

准备工作

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

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

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

    • 添加性能监控 Gradle 插件。
    • 添加性能监控 Android 库的依赖项。
    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:16.0.8'
    
        // Add Performance Monitoring dependency line
        implementation 'com.google.firebase:firebase-perf:16.2.5'
    }
    
  2. 在根级(项目级)Gradle 文件 (build.gradle) 中添加规则,以纳入性能监控插件。

    buildscript {
    
        repositories {
          // Check that you have the following line (if not, add it):
          jcenter()
    
          // ...
        }
    
        dependencies {
          // ...
          classpath 'com.google.gms:google-services:4.2.0'  // Google Services plugin
    
          // Add the following line:
          classpath 'com.google.firebase:perf-plugin:1.2.0'  // 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 步(可选)添加自定义跟踪记录和自定义指标

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

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

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

    import com.google.firebase.perf.FirebasePerformance;
    import com.google.firebase.perf.metrics.Trace;
    
  2. 在应用中您要开始跟踪的代码前面,添加下面这行代码以启动名为 test_trace 的跟踪:

    Java
    Android

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();

    Kotlin
    Android

    val myTrace = FirebasePerformance.getInstance().newTrace("test_trace")
    myTrace.start()
  3. 要统计应用中与性能相关的事件(如缓存命中数和未命中数),请在每次发生事件时添加类似于以下内容的代码。如果要统计不同类型的事件,请使用 item_cache_hititem_cache_miss 以外的字符串来命名该事件:

    Java
    Android

    Item item = cache.fetch("item");
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1);
    } else {
        myTrace.incrementMetric("item_cache_miss", 1);
    }

    Kotlin
    Android

    val item = cache.fetch("item")
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1)
    } else {
        myTrace.incrementMetric("item_cache_miss", 1)
    }
  4. 在您要停止跟踪记录的代码后面,添加下面这行代码:

    Java
    Android

    myTrace.stop();

    Kotlin
    Android

    myTrace.stop()

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

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

但请注意,以这种方式创建的跟踪记录没有可用的指标。

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

Java
Android

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

Kotlin
Android

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

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

Firebase 性能监控会自动收集网络请求。这包括您的应用的多数网络请求,但部分请求可能不会纳入到报告中。

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

Java
Android

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
Android

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.0)。

    • 替换根级(项目级)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

后续步骤