从GCM迁移至FCM遇阻:Android Notification类找不到求助
嘿,咱们来解决你从GCM迁移到FCM时遇到的Android Notification class not found问题。结合你的配置来看,大概率是这几个原因导致的,对应的解决办法如下:
1. 依赖版本不兼容
你当前使用的firebase-messaging:15.0.0和google-services:3.0.0版本匹配度很差,Google Services插件版本需要和Firebase SDK版本保持兼容。15.x系列的Firebase SDK建议搭配4.0.0及以上版本的google-services插件。
修改根目录下的build.gradle中的classpath:
classpath 'com.google.gms:google-services:4.3.10' // 选择一个稳定的兼容版本
修改后点击同步项目,让配置生效。
2. 误引入服务端GCM库
你之前添加的com.google.gcm:gcm-server:1.0.0是服务端专用库,不是Android客户端的依赖!如果在Android项目中引入这个库,很可能会引发依赖冲突或者类加载异常,直接导致Notification类找不到。
立刻移除客户端build.gradle中的这条依赖:
// 删掉这行! compile ("com.google.gcm:gcm-server:1.0.0")
客户端只需要保留FCM的依赖(另外注意现在Android Gradle插件推荐用implementation代替compile):
implementation 'com.google.firebase:firebase-messaging:15.0.0'
3. 混淆规则误移除Notification类
如果你的项目开启了ProGuard混淆,很可能是混淆规则把android.app.Notification相关类给移除了。
在proguard-rules.pro中添加以下规则,保留Notification相关类:
-keep class android.app.Notification { *; } -keep class android.app.Notification$** { *; } // 如果用了AndroidX的NotificationCompat,也要加上 -keep class androidx.core.app.NotificationCompat { *; } -keep class androidx.core.app.NotificationCompat$** { *; }
4. AndroidX兼容性问题(若项目已迁移AndroidX)
如果你的项目已经迁移到AndroidX,旧的android.app.Notification可能和AndroidX的类体系冲突,建议统一使用AndroidX的NotificationCompat来构建通知。
首先确保项目开启了AndroidX支持(在gradle.properties中):
android.useAndroidX=true android.enableJetifier=true
然后在代码中导入正确的类:
// 替换旧的import import androidx.core.app.NotificationCompat;
同时添加AndroidX核心库的依赖:
implementation 'androidx.core:core-ktx:1.7.0' // 对应项目的AndroidX版本
按以上步骤逐一排查,应该能解决这个类找不到的问题。
内容的提问来源于stack exchange,提问作者Tran Tam

