未集成Firebase的Android应用触发Firebase请求并崩溃的排查求助
- 应用未手动集成Firebase,全局搜索确认代码中无"firebase"相关内容
- Logcat中出现请求FirebaseLogging服务的日志:
I/TRuntime.CctTransportBackend: Making request to:
https://firebaselogging.googleapis.com/v0cc/log/batch?format=json_proto3
- 近期更新依赖后,触发该请求时应用持续崩溃,崩溃原因为
StrictMode.UntaggedSocketViolation违规 - 应用未使用第三方统计或广告包,依赖列表如下:
implementation "androidx.activity:activity:1.7.1" implementation 'androidx.fragment:fragment:1.5.7' implementation "androidx.navigation:navigation-fragment:2.5.3" implementation "androidx.navigation:navigation-ui:2.5.3" implementation "androidx.preference:preference:1.2.0" implementation "androidx.datastore:datastore:1.0.0" implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.work:work-runtime:2.8.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.browser:browser:1.5.0' implementation 'com.google.android.gms:play-services-plus:17.0.0' implementation 'com.google.android.gms:play-services-auth:20.5.0' implementation 'com.google.android.gms:play-services-location:21.0.1' implementation('com.google.guava:guava:30.1.1-android') { exclude group: "com.google.guava" } implementation 'com.google.android.gms:play-services-oss-licenses:17.0.1' implementation 'androidx.multidex:multidex:2.0.1' implementation 'joda-time:joda-time:2.10.10' implementation 'com.github.angads25:filepicker:1.1.1' implementation 'commons-io:commons-io:2.5' implementation 'com.google.android.flexbox:flexbox:3.0.0' implementation 'com.google.android.ads.consent:consent-library:1.0.8' implementation 'com.github.hedzr:android-file-chooser:d7b831bf0a' implementation('com.google.http-client:google-http-client-gson:1.26.0') { exclude group: 'org.apache.httpcomponents' } implementation('com.google.api-client:google-api-client-android:1.26.0') { exclude group: 'org.apache.httpcomponents' } implementation('com.google.apis:google-api-services-drive:v3-rev136-1.25.0') { exclude group: 'org.apache.httpcomponents' } implementation 'com.android.billingclient:billing:6.0.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'org.apache.commons:commons-lang3:3.11'
完整崩溃日志:
StrictMode policy violation: android.os.strictmode.UntaggedSocketViolation: Untagged socket detected; use TrafficStats.setThreadSocketTag() to track all network usage at android.os.StrictMode.onUntaggedSocket(StrictMode.java:2023) at com.android.server.NetworkManagementSocketTagger.tag(NetworkManagementSocketTagger.java:82) at libcore.io.BlockGuardOs.tagSocket(BlockGuardOs.java:50) at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:313) at libcore.io.IoBridge.socket(IoBridge.java:640) at java.net.PlainSocketImpl.socketCreate(PlainSocketImpl.java:124) at java.net.AbstractPlainSocketImpl.create(AbstractPlainSocketImpl.java:128) at java.net.Socket.createImpl(Socket.java:489) at java.net.Socket.getImpl(Socket.java:552) at java.net.Socket.setSoTimeout(Socket.java:1180) at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:139) at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:26) at com.google.android.datatransport.cct.CctTransportBackend.doSend(CctTransportBackend.java:303) at com.google.android.datatransport.cct.CctTransportBackend.$r8$lambda$bLAzIpNF4NtapXlUpPVGhzxyNT8(Unknown Source:0) at com.google.android.datatransport.cct.CctTransportBackend$$ExternalSyntheticLambda0.apply(Unknown Source:4) at com.google.android.datatransport.runtime.retries.Retries.retry(Retries.java:54) at com.google.android.datatransport.cct.CctTransportBackend.send(CctTransportBackend.java:372) at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.logAndUpdateState(Uploader.java:146) at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader.lambda$upload$1$com-google-android-datatransport-runtime-scheduling-jobscheduling-Uploader(Uploader.java:105) at com.google.android.datatransport.runtime.scheduling.jobscheduling.Uploader$$ExternalSyntheticLambda2.run(Unknown Source:8) at com.google.android.datatransport.runtime.SafeLoggingExecutor$SafeLoggingRunnable.run(SafeLoggingExecutor.java:47) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764)
触发原因分析
从崩溃日志的调用栈可以看到,请求来自com.google.android.datatransport.cct.CctTransportBackend——这是Google Data Transport库的组件,CCT(Crashlytics Cloud Transport)是它的默认传输通道,会调用Firebase相关的日志端点。
这个库是被你依赖的某个Google官方库间接引入的,嫌疑最大的包括:
com.google.android.gms:play-services-auth/play-services-location等Play Services组件com.android.billingclient:billing(新版本Billing库会引入Data Transport收集诊断数据)com.google.android.ads.consent:consent-library
这些官方库会自动启用Data Transport来收集匿名诊断信息,无需手动集成Firebase。
崩溃的直接原因是:你的应用开启了StrictMode的严格网络检测规则,而Data Transport发起网络请求时没有给Socket设置TrafficStats标签,触发了UntaggedSocketViolation并导致崩溃。
解决方法
方法1:禁用Data Transport自动上报
在AndroidManifest.xml中添加元数据配置,阻止Data Transport发送数据:
<!-- 全局禁用Data Transport --> <meta-data android:name="firebase.datatransport.enabled" android:value="false" /> <!-- 仅禁用CCT传输通道(更精准) --> <meta-data android:name="com.google.android.datatransport.cct.enabled" android:value="false" />
方法2:排除Data Transport依赖
如果不需要该功能,可以在引入的Google官方依赖中排除Data Transport模块,示例如下:
implementation 'com.android.billingclient:billing:6.0.0' { exclude group: 'com.google.android.datatransport' } implementation 'com.google.android.gms:play-services-auth:20.5.0' { exclude group: 'com.google.android.datatransport' }
注意:排除前需确认不会影响依赖库的核心功能,部分库可能依赖Data Transport运行。
方法3:调整StrictMode规则
若需保留StrictMode但允许未标记的Socket请求,可在StrictMode配置中关闭对应检测:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .penaltyDeath() .permitUntaggedSockets() // 允许未标记的Socket请求 .build(); StrictMode.setThreadPolicy(policy);
建议仅在debug模式下使用此配置,release版本保持严格检测以规范网络请求。
内容的提问来源于stack exchange,提问作者Hong

