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

Android项目接入Cloud Firestore遇gRPC通道服务提供者异常求助

Android接入Cloud Firestore遇gRPC通道提供者缺失问题

我在Android项目中接入Cloud Firestore,按照官方指南操作,使用代码如下:

val firestoreOptions = FirestoreOptions.getDefaultInstance().toBuilder()
            .setProjectId("my_project_id")
            .setCredentials(GoogleCredentials.fromStream(inputStream))
            .build()

val db: Firestore = firestoreOptions.service

调用firestoreOptions.service时触发如下异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testing/com.example.testing.ui.activity.MainActivity}: com.google.cloud.firestore.FirestoreException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: 未找到可用的通道服务提供者。请尝试添加grpc-okhttp、grpc-netty或grpc-netty-shaded依赖
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: com.google.cloud.firestore.FirestoreException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: 未找到可用的通道服务提供者。请尝试添加grpc-okhttp、grpc-netty或grpc-netty-shaded依赖
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:90)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:80)
        at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:564)
        at com.google.cloud.firestore.FirestoreOptions.getFirestoreRpc(FirestoreOptions.java:358)
        at com.google.cloud.firestore.FirestoreImpl.<init>(FirestoreImpl.java:79)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:71)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:64)
        at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:544)
        at com.example.testing.ui.activity.MainActivity.onCreate(MainActivity.kt:85)
        at android.app.Activity.performCreate(Activity.java:8305)
        at android.app.Activity.performCreate(Activity.java:8284)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: java.io.IOException: io.grpc.ManagedChannelProvider$ProviderNotFoundException: 未找到可用的通道服务提供者。请尝试添加grpc-okhttp、grpc-netty或grpc-netty-shaded依赖
        at com.google.cloud.firestore.spi.v1.GrpcFirestoreRpc.<init>(GrpcFirestoreRpc.java:142)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:88)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:80)
        at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:564)
        at com.google.cloud.firestore.FirestoreOptions.getFirestoreRpc(FirestoreOptions.java:358)
        at com.google.cloud.firestore.FirestoreImpl.<init>(FirestoreImpl.java:79)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:71)
        at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:64)
        at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:544)
        at com.example.testing.ui.activity.MainActivity.onCreate(MainActivity.kt:85)
        at android.app.Activity.performCreate(Activity.java:8305)
        at android.app.Activity.performCreate(Activity.java:8284)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: io.grpc.ManagedChannelProvider$ProviderNotFoundException: 未找到可用的通道服务提供者。请尝试添加grpc-okhttp、grpc-netty或grpc-netty-shaded依赖
        at io.grpc.ManagedChannelProvider.provider(ManagedChannelProvider.java:45)
        at io.grpc.ManagedChannelBuilder.forAddress(ManagedChannelBuilder.java:39)
        at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:351)
        at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.$r8$lambda$uvhXwQKV1b6n5wSR9q5C4LYdHSs(Unknown Source:0)
        at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider$$ExternalSyntheticLambda0.createSingleChannel(Unknown Source:2)
        at com.google.api.gax.grpc.ChannelPool.<init>(ChannelPool.java:107)
        at com.google.api.gax.grpc.ChannelPool.create(ChannelPool.java:85)

当前使用的Firestore依赖:

implementation ('com.google.cloud:google-cloud-firestore:3.9.3')

已尝试添加以下gRPC依赖,但问题仍未解决:

implementation 'io.grpc:grpc-okhttp:1.30.0'
implementation 'io.grpc:grpc-netty:1.30.0'
implementation 'io.grpc:grpc-netty-shaded:1.30.0'
implementation 'io.grpc:grpc-api:1.44.1'

问题根源

你误用了服务器端Cloud Firestore SDK,这个SDK是为后端Java应用设计的,不适合Android环境。Android项目应该使用Firebase官方提供的客户端Firestore SDK,这才是适配移动设备的正确选择。另外你添加的gRPC版本和服务器SDK依赖的版本不兼容,也是导致通道提供者找不到的原因之一。

正确解决方案

方案1:改用Android客户端Firestore SDK(推荐)

这是Android接入Firestore的标准方式,支持离线缓存、自动认证、体积更小:

  1. 移除服务器端依赖:

    // 删除这行服务器端SDK依赖
    // implementation ('com.google.cloud:google-cloud-firestore:3.9.3')
    
  2. 添加客户端依赖:
    确保项目根目录的settings.gradle中已配置Google Maven仓库:

    dependencyResolutionManagement {
        repositories {
            google()
            // 其他仓库...
        }
    }
    

    然后在模块的build.gradle中添加客户端SDK:

    implementation 'com.google.firebase:firebase-firestore-ktx:24.10.0' // 建议使用最新稳定版
    
  3. 初始化Firestore:
    客户端SDK无需手动配置服务账号,会自动通过Firebase认证连接:

    import com.google.firebase.firestore.FirebaseFirestore
    
    val db = FirebaseFirestore.getInstance()
    

方案2:强制使用服务器端SDK(仅特殊场景)

如果确实需要在Android中使用服务器端SDK,需解决依赖冲突和兼容性问题:

  1. 统一gRPC版本:
    查看google-cloud-firestore:3.9.3依赖的gRPC版本(可通过./gradlew dependencies命令查看依赖树),确保添加的gRPC依赖版本完全一致。该版本对应的gRPC版本为1.51.0,所以只添加兼容的grpc-okhttp(Android推荐使用):

    implementation 'io.grpc:grpc-okhttp:1.51.0'
    implementation 'io.grpc:grpc-api:1.51.0'
    

    注意:不要同时添加grpc-netty和grpc-okhttp,避免冲突。

  2. 配置ProGuard规则:
    防止gRPC相关类被混淆,在proguard-rules.pro中添加:

    -keep class io.grpc.** { *; }
    -keep class com.google.api.gax.** { *; }
    -keep class com.google.cloud.firestore.** { *; }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:02:01