【问题标题】:Fcm integration getting the exceptionFcm 集成出现异常
【发布时间】:2017-03-26 11:16:22
【问题描述】:


我正在处理 FCM 集成,但正在获取 java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseMessagingService" on path: DexPathList[[zip file "/data/app/com.rk.servicepractise-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]

我已经搜索了它,但还没有找到正确的解决方案,请检查我下面的代码,让我知道我在哪里做错了吗?

请检查我的classesmanifest 文件gradle,请帮我解决这个问题。
我的第一堂课是 MyFirebaseInstanceIDService,它扩展了 FirebaseInstanceIdService

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";

    @Override
    public void onTokenRefresh() {

        //Getting registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        //Displaying token on logcat
        Log.d(TAG, "Refreshed token: " + refreshedToken);

    }

    private void sendRegistrationToServer(String token) {
        //You can implement this method to store the token on your server
        //Not required for current project
    }
}

还有一个扩展 FirebaseMessagingService 类的 Fcm 类,如下所示:-

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MyFirebaseMsgService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        //Displaying data in log
        //It is optional
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());

        //Calling method to generate notification
        sendNotification(remoteMessage.getNotification().getBody());
    }

    //This method is only generating push notification
    //It is same as we did in earlier posts
    private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase Push Notification")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
    }
}

下面是这个Fcm的清单文件条目

<application>
.
.
.
.

  <service
        android:name="com.rk.servicepractise.service.MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

    <service
        android:name="com.rk.servicepractise.service.MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

    </application>

我使用的 gradle 如下 Module:app:-

apply plugin: 'com.android.application'

android {
.
.
.
.
.

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.google.firebase:firebase-messaging:9.8.0'

}
apply plugin: 'com.google.gms.google-services'

build.gradleProject:ProjectName 为敌

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.google.gms:google-services:3.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

以下是我得到的例外:-

                                                           java.lang.RuntimeException: Unable to instantiate service service.MyFirebaseInstanceIDService: java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseInstanceIDService" on path: DexPathList[[zip file "/data/app/com.rk.servicepractise-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
                                                                    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2779)
                                                                    at android.app.ActivityThread.access$1900(ActivityThread.java:154)
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1404)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                    at android.os.Looper.loop(Looper.java:135)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5292)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
                                                                 Caused by: java.lang.ClassNotFoundException: Didn't find class "service.MyFirebaseInstanceIDService" on path: DexPathList[[zip file "/data/app/com.rk.servicepractise-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
                                                                    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                                                                    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                                                                    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2776)
                                                                    at android.app.ActivityThread.access$1900(ActivityThread.java:154) 
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1404) 
                                                                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                    at android.os.Looper.loop(Looper.java:135) 
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5292) 
                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                    at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
                                                                    Suppressed: java.lang.ClassNotFoundException: service.MyFirebaseInstanceIDService
                                                                    at java.lang.Class.classForName(Native Method)
                                                                    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                                                                    at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                                                                    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

已编辑如果您遇到同样的问题,请点击此链接,谢谢@Marcin Orlowski ...链接:-Click here

【问题讨论】:

  • 请用这个 compile 'com.google.firebase:firebase-messaging:9.8.0' 替换你的 firebase 编译行
  • @RujulGandhi ...同样的问题正在发生,而我已经改变了你建议的 Complie gradle
  • 您确定您的两个类(MyFirebaseMessagingService、MyFirebaseInstanceIDService)都在您的“服务”文件夹中吗?请检查并确保您的代码不包含任何与权限相关的 GCM。如果有任何关于 GCM 的权限,请删除它然后检查它。 @Ravindra Kushwaha。
  • 是的@RujulGandhi ..我在服务包中的两个类..我没有像gcm这样的权限请检查我的'manifest'和'gradle'文件。
  • 请用所有权限更新你的整个主节?@Ravindra Kushwaha

标签: android google-cloud-messaging firebase-cloud-messaging


【解决方案1】:

只需在您的 Mainfest 文件中的 Service 之前添加点 (.)。

换句话说,以下方法可以解决问题:

<service android:name=".service.MyFirebaseMessagingService">

【讨论】:

  • ..感谢您的回复...但我没明白,您要解释什么
  • @raj-gohel 下次请提供更多描述性。 SO 经常被除 OP 之外的其他人用来寻找他们的问题的解决方案,因此有神秘的答案(即使它有助于 OP)几乎没有用
  • @MarcinOrlowski 先生,我现在要做什么??删除“service.MyFirebaseMessagingService”中的服务??请帮忙
  • 不,请阅读我链接到的答案。然后,一旦你明白了原因,只需在你的 android:name 标签中添加点 (.),它看起来就像 &lt;service android:name=".service.MyFirebaseMessagingService"&gt;。请注意,在您的问题中,您使用service,而不是Service。案件很重要
  • @RajGohel 谢谢..它工作..接受你的回答:)
【解决方案2】:

就我而言,我不得不更换

&lt;service android:name="MyFirebaseMessagingService" android:exported="false"&gt;

&lt;service android:name="com.google.firebase.messaging.FirebaseMessagingService"&gt;

【讨论】:

  • 这也解决了我的问题!
【解决方案3】:

不管怎样,我已经通过将我的 FirebaseMessagingService 侦听器类移动到根包文件夹中解决了这个问题。我正在使用 android:name=".fcm.FCMListenerService",每当设备收到通知时,它就会如上所述不断崩溃。将其移动到它开始工作的根包文件夹,即 android:name=".FCMListenerService"。

更新:我将我的服务移回 fcm 文件夹并且它继续工作,所以这不是答案。然而,它确实做了一些事情让事情变得生动起来,所以它可能值得一试(我与这个问题斗争了几个小时)。

【讨论】:

    【解决方案4】:

    我遇到了同样的错误,并通过执行清理然后重建来修复它。我认为在项目被重新索引之前,该文件没有被正确引用。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多