You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Library模块中为Firebase Performance Monitor添加自定义追踪

我之前也碰到过这个问题,Firebase Performance确实对Library模块的直接集成支持有限,不过有两个靠谱的方案能帮你实现Library模块的自定义追踪需求,下面一步步给你拆解:

方案一:接口抽象+依赖注入(推荐,低耦合)

这个思路是让Library模块只定义追踪行为的接口,不直接依赖Firebase Perf,由App模块提供具体的Firebase实现,完美规避Library模块的限制。

  1. 在Library模块定义追踪接口
    创建一个通用的性能追踪接口,涵盖你需要的自定义追踪能力:
// Library模块中
interface PerformanceTracker {
    fun startCustomTrace(traceName: String)
    fun stopCustomTrace(traceName: String)
    fun addTraceAttribute(traceName: String, key: String, value: String)
}
  1. Library模块业务代码依赖接口实现追踪
    在Library的业务逻辑中,通过注入的接口实例调用追踪方法,完全不直接接触Firebase类:
// Library模块中
class FileProcessingUtil(private val tracker: PerformanceTracker?) {
    fun processLargeFile(filePath: String) {
        // 开始追踪
        tracker?.startCustomTrace("library_file_processing")
        tracker?.addTraceAttribute("library_file_processing", "file_path", filePath)
        
        // 执行你的文件处理逻辑
        // ...
        
        // 结束追踪
        tracker?.stopCustomTrace("library_file_processing")
    }
}
  1. App模块实现Firebase版本的追踪接口
    利用你已经集成好的Firebase Perf依赖,实现Library定义的接口:
// App模块中
class FirebasePerfTracker : PerformanceTracker {
    private val perfInstance = FirebasePerformance.getInstance()
    private val activeTraces = mutableMapOf<String, Trace>()

    override fun startCustomTrace(traceName: String) {
        val trace = perfInstance.newTrace(traceName)
        trace.start()
        activeTraces[traceName] = trace
    }

    override fun stopCustomTrace(traceName: String) {
        activeTraces.remove(traceName)?.stop()
    }

    override fun addTraceAttribute(traceName: String, key: String, value: String) {
        activeTraces[traceName]?.putAttribute(key, value)
    }
}
  1. 初始化Library组件时注入实现
    在App模块中创建Library业务类实例时,把Firebase的追踪实现传进去:
// App模块中
val firebaseTracker = FirebasePerfTracker()
val fileProcessor = FileProcessingUtil(firebaseTracker)
fileProcessor.processLargeFile("/sdcard/test.pdf")
方案二:CompileOnly依赖+ProGuard配置(快速实现,强耦合)

如果不想做接口抽象,也可以通过compileOnly让Library模块能编写Firebase Perf代码,由App模块提供实际依赖:

  1. Library模块添加CompileOnly依赖
    在Library的build.gradle中添加:
// Library模块build.gradle
dependencies {
    compileOnly 'com.google.firebase:firebase-perf:20.4.0' // 替换为你使用的最新版本
}
  1. Library模块直接编写Firebase追踪代码
    现在可以在Library里直接调用Firebase Perf的API了:
// Library模块中
fun fetchRemoteData() {
    val trace = FirebasePerformance.getInstance().newTrace("library_remote_fetch")
    trace.start()
    
    // 执行网络请求逻辑
    // ...
    
    trace.stop()
}
  1. App模块配置ProGuard避免代码被移除
    因为Library里的Firebase代码是编译时依赖,要确保ProGuard不会把这些代码混淆或移除,在App模块的proguard-rules.pro中添加:
-keep class com.google.firebase.perf.** { *; }
-keep class com.google.android.gms.measurement.** { *; }

注意:这个方案会让Library模块和Firebase Perf强耦合,如果后续要替换监控工具,改动成本会很高,所以更推荐方案一。

内容的提问来源于stack exchange,提问作者Nidhin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:03:12