Unable to instantiate GcmBroadcastReceiver

android, google-cloud-messaging

Solution

Try this:

Go to Project/Properties/Java Build Path/Order and Export -- Make sure there's a check in front of Android Dependencies and the support library, if you use it.Mark all checkboxes.Click on Apply and clean the project.

Add like this :

   <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.test.android" />
        </intent-filter>
    </receiver>

It should be : com.google.android.gcm.GCMBroadcastReceiver and not .GCMBroadcastReceiver

This worked for me.Hope this helps.

Problem

I tried to create test app with GCM service, according to the Google manual https://developer.android.com/google/gcm/client.html#app But when i receive message - I have this error: Unable to instantiate receiver com.example.testpushnotification.GcmBroadcastReceiver: java.lang.ClassNotFoundException: Didn't find class "com.example.testpushnotification.GcmBroadcastReceiver" on path: DexPathList[[zip file "/data/app/com.example.testpushnotification-2.apk"], nativeLibraryDirectories=[/data/app-lib/com.example.testpushnotification-2, /vendor/lib, /system/lib]] I was looking for all same questions, but they have no solutions or solutions didn't help or they are deprecated. My manifest: ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testpushnotification" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <permission android:name="com.example.testpushnotification.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.testpushnotification.permission.C2D_MESSAGE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <activity android:name="com.example.testpushnotification.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.example.testpushnotification"/> </intent-filter> </receiver> <service android:name=".GcmIntentService"/> </application> ``` And source code for GcmBroadcastReceiver in the com.example.testpushnotification package: ``` public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } ``` And why Dex path contains differ package than my? Please, how to fix it ? FIXED Changed `<receiver android:name=".GcmBroadcastReceiver" .. </receiver>` to `<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" .. </receiver>` (case sensetive)

Original source