停用 Firebase Performance Monitoring


在應用程式開發和測試期間,您可能會發現停用 Performance Monitoring 很有用。

舉例來說,您可以在應用程式建構程序中停用 Performance Monitoring,以便:

  • 在偵錯版本中停用 Performance Monitoring 的特定功能 (例如 Performance Monitoring Gradle 外掛程式提供的功能),但重新啟用發布版本的功能。

  • 在建構應用程式時停用 Performance Monitoring,但允許應用程式在執行階段重新啟用。

  • 建構應用程式時停用 Performance Monitoring,並禁止應用程式在執行階段重新啟用 Performance Monitoring

您也可以在啟用 Performance Monitoring 的情況下建構應用程式,但使用 Firebase Remote Config 可讓您靈活地在正式版應用程式中停用 (及重新啟用) Performance Monitoring。透過這個選項,您甚至可以設定應用程式,讓使用者選擇是否要使用 Performance Monitoring

在應用程式建構程序中停用 Performance Monitoring

您可以在建構程序期間停用 Performance Monitoring,方法是停用 Performance Monitoring Gradle 外掛程式和/或停用 Performance Monitoring Android 程式庫

在開發和偵錯期間,停用外掛程式相當實用,因為外掛程式所進行的檢測可能會導致建構時間增加。不過,您可以考慮繼續啟用程式庫,這樣就能繼續查看應用程式啟動、應用程式前景和應用程式背景追蹤記錄,以及應用程式中的任何自訂程式碼追蹤記錄

停用 Performance Monitoring Gradle 外掛程式

您可以使用下列選項新增 instrumentationEnabled 標記,藉此停用 Performance Monitoring 外掛程式:

  • 擴充功能屬性:在編譯時,為特定建構變化版本停用外掛程式

  • 專案屬性:在編譯時,為所有建構變化版本停用外掛程式

透過擴充功能資源標記停用外掛程式

您可以使用「Extensions Property」旗標,在編譯時停用特定建構變化版本的 Performance Monitoring 外掛程式。

  1. 根層級 (專案層級) Gradle 檔案 (<project>/build.gradle.kts<project>/build.gradle) 中,請確認 Android Gradle 外掛程式依附元件已指定為 v3.4.0 以上版本。

    對於 Android Gradle 外掛程式的舊版,您仍可為特定建構變化版本停用 Performance Monitoring 外掛程式,但該變化版本的建構時間貢獻值不會完全消除。

  2. 將以下標記新增至模組 (應用程式層級) Gradle 檔案 (通常為 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle),然後將其設為 false 即可停用 Performance Monitoring 外掛程式。

    Kotlin

    import com.google.firebase.perf.plugin.FirebasePerfExtension
    
    // ...
    
    android {
      // ...
      buildTypes {
        getByName("debug") {
          configure<FirebasePerfExtension> {
            // Set this flag to 'false' to disable @AddTrace annotation processing and
            // automatic monitoring of HTTP/S network requests
            // for a specific build variant at compile time.
            setInstrumentationEnabled(false)
          }
        }
      }
    }

    Groovy

    android {
      // ...
      buildTypes {
        debug {
          FirebasePerformance {
            // Set this flag to 'false' to disable @AddTrace annotation processing and
            // automatic monitoring of HTTP/S network requests
            // for a specific build variant at compile time.
            instrumentationEnabled false
          }
        }
      }
    }

透過專案資源標記停用外掛程式

您可以使用「Project Property」旗標,在編譯時為所有建構變化版本停用 Performance Monitoring 外掛程式。

將下列旗標新增至 gradle.properties 檔案,然後將其設為 false,即可停用 Performance Monitoring 外掛程式。

// ...

// Set this flag to 'false' to disable @AddTrace annotation processing and
// automatic monitoring of HTTP/S network requests
// for all build variants at compile time.
firebasePerformanceInstrumentationEnabled=false

停用 Performance Monitoring Android 程式庫

如果您在編譯時停用 Performance Monitoring 程式庫,可以選擇是否允許應用程式在執行階段啟用該程式庫。

在編譯時停用程式庫,但允許應用程式在執行階段啟用程式庫

請在應用程式的 AndroidManifest.xml 檔案中加入下列 <meta-data> 元素:

  <application>
    <meta-data
      android:name="firebase_performance_collection_enabled"
      android:value="false" />
  </application>

在編譯時停用程式庫,但不允許應用程式在執行階段啟用程式庫

在應用程式的 AndroidManifest.xml 檔案中新增下列 <meta-data> 元素:

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

使用 Remote Config 在執行階段停用應用程式

Firebase Remote Config 可讓您變更應用程式的行為和外觀,因此是您在應用程式部署例項中停用 Performance Monitoring 的理想方式。

如要在下次啟動 Android 應用程式時停用 Performance Monitoring 資料收集功能,請使用下方的範例程式碼。如要進一步瞭解如何在 Android 應用程式中使用 Remote Config,請參閱「在 Android 上使用 Firebase Remote Config」。

  1. 請確認 Remote Config 位於模組 (應用程式層級) Gradle 檔案 (通常為 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle) 的 dependencies 區段中:

    Kotlin+KTX

      implementation("com.google.firebase:firebase-config-ktx:22.0.1")
    

    Java

      implementation("com.google.firebase:firebase-config:22.0.1")
    
  2. 如果 perf_disable 設為 true,請設定 Remote Config 並停用 Performance Monitoring

    Kotlin+KTX

    // Setup remote config
    val config = Firebase.remoteConfig
    
    // You can uncomment the following two statements to permit more fetches when
    // validating your app, but you should comment out or delete these lines before
    // distributing your app in production.
    // val configSettings = remoteConfigSettings {
    //     minimumFetchIntervalInSeconds = 3600
    // }
    // config.setConfigSettingsAsync(configSettings)
    // Load in-app defaults from an XML file that sets perf_disable to false until you update
    // values in the Firebase Console
    
    // Observe the remote config parameter "perf_disable" and disable Performance Monitoring if true
    config.setDefaultsAsync(R.xml.remote_config_defaults)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Firebase.performance.isPerformanceCollectionEnabled = !config.getBoolean("perf_disable")
            } else {
                // An error occurred while setting default parameters
            }
        }

    Java

    // Setup remote config
    final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    
    // You can uncomment the following two statements to permit more fetches when
    // validating your app, but you should comment out or delete these lines before
    // distributing your app in production.
    // FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
    //       .setMinimumFetchIntervalInSeconds(3600)
    //       .build();
    // config.setConfigSettingsAsync(configSettings);
    // Load in-app defaults from an XML file that sets perf_disable to false until you update
    // values in the Firebase Console
    
    //Observe the remote config parameter "perf_disable" and disable Performance Monitoring if true
    config.setDefaultsAsync(R.xml.remote_config_defaults)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        if (config.getBoolean("perf_disable")) {
                            FirebasePerformance.getInstance().setPerformanceCollectionEnabled(false);
                        } else {
                            FirebasePerformance.getInstance().setPerformanceCollectionEnabled(true);
                        }
                    } else {
                        // An error occurred while setting default parameters
                    }
                }
            });
  3. 將下列程式碼新增至 MainActivity.java,擷取並啟用 Remote Config 值:

    Kotlin+KTX

    // Remote Config fetches and activates parameter values from the service
    val config = Firebase.remoteConfig
    config.fetch(3600)
        .continueWithTask { task ->
            if (!task.isSuccessful) {
                task.exception?.let {
                    throw it
                }
            }
            config.activate()
        }
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Parameter values successfully activated
                // ...
            } else {
                // Handle errors
            }
        }

    Java

    //Remote Config fetches and activates parameter values from the service
    final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    config.fetch(3600)
            .continueWithTask(new Continuation<Void, Task<Boolean>>() {
                @Override
                public Task<Boolean> then(@NonNull Task<Void> task) throws Exception {
                    if (!task.isSuccessful()) {
                        throw task.getException();
                    }
                    return config.activate();
                }
            })
            .addOnCompleteListener(new OnCompleteListener<Boolean>() {
                @Override
                public void onComplete(@NonNull Task<Boolean> task) {
                    if (task.isSuccessful()) {
                        // Parameter values successfully activated
                        // ...
                    } else {
                        // Handle errors
                    }
                }
            });
  4. 如要在 Firebase 控制台中停用 Performance Monitoring,請在應用程式專案中建立 perf_disable 參數,然後將其值設為 true

    這項異動會對 Performance Monitoring SDK 發出「無操作」呼叫 (NOOP),消除在應用程式中使用 Performance Monitoring SDK 對應用程式效能造成的任何重大影響。

    如果您將 perf_disable 的值設為 falsePerformance Monitoring 仍會保持啟用狀態。