0

I am trying to implement GCM push Notifications, I am able to achieve the GCM notifications when my app is running or in background. But when app is killed by swiping the app through the running app list I am getting below exception in the service class which is handling the GCM notifications and triggers a notification onto the notification tray:

java.lang.NoClassDefFoundError: android.support.v4.app.NotificationCompatKitKat$Builder

Below is my Manifest file pertaining to GCM

<receiver
     android:name="com.google.android.gms.gcm.GcmReceiver"
     android:permission="com.google.android.c2dm.permission.SEND">
     <intent-filter>
           <action android:name="com.google.android.c2dm.intent.RECEIVE" />
           <category android:name="com.xxxxx.xxxxxx.xxxxx" />
     </intent-filter>
</receiver>

 <service
     android:name=".services.GCMNotificationListenerService"
            android:exported="false">
     <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
     </intent-filter>
 </service>

Below is onMessageRecieved method of service class GCMNotificationListenerService:

    @Override
         public void onMessageReceived(String from,Bundle data){
     Log.d(TAG, "In Receive Method of GCm Listener Service");



Intent intent =  new Intent(this, MyActivity.class);
        intent.putExtra("myKey","myValue");

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);
Context context = getBaseContext();
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher).setContentTitle("This is Title")
                .setContentText("Body of the message").setContentIntent( pendingIntent);
        NotificationManager mNotificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(MESSAGE_NOTIFICATION_ID, mBuilder.build());
          }

The above code runs absolutely fine when the app is running or in background but the same throws exception java.lang.NoClassDefFoundError: android.support.v4.app.NotificationCompatKitKat$Builder when the app is killed.

Am I missing something ? Kindly help.

Here is my build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'

    }
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
//apply plugin: 'com.google.gms.google-services'
repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.chromosis.wishhapp.wishhapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    // workaround for "duplicate files during packaging of APK" issue
    // see https://groups.google.com/d/msg/adt-dev/bl5Rc4Szpzg/wC8cylTWuIEJ
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    dexOptions {
        javaMaxHeapSize "2g"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'
    //compile 'com.couchbase.lite:couchbase-lite-android:1.0.3.1'
    compile 'com.couchbase.lite:couchbase-lite-android:1.1.0'
    compile 'com.android.support:recyclerview-v7:21.0.3'
    compile 'com.android.support:cardview-v7:21.0.3'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'it.neokree:MaterialTabs:0.11'
    compile project(':citruslibrary')
    compile 'com.soundcloud.android:android-crop:1.0.0@aar'
    compile 'xyz.danoz:recyclerviewfastscroller:0.1.3'
    compile 'com.pkmmte.view:circularimageview:1.1'
    compile 'com.android.support:palette-v7:21.0.+'
    compile 'com.mcxiaoke.volley:library-aar:1.0.1'
    compile 'com.appboy:android-sdk-ui:1.7.3'
    compile 'com.android.support:design:22.2.0'
    compile 'me.villani.lorenzo.android:android-cropimage:1.1.0'
    compile('com.crashlytics.sdk.android:crashlytics:2.4.0@aar') {
        transitive = true;
    }
    compile 'com.amazonaws:aws-android-sdk-core:2.2.9'
    compile 'com.amazonaws:aws-android-sdk-cognito:2.2.9'
    compile 'com.amazonaws:aws-android-sdk-s3:2.2.9'
    compile 'com.amazonaws:aws-android-sdk-ddb:2.2.9'
    compile 'com.android.support:multidex:1.0.0'
    //compile 'com.google.android.gms:play-services-gcm:8.3.0'
    compile 'com.google.android.gms:play-services-gcm:8.1.0'


}
Ram
  • 51
  • 6

1 Answers1

0

I always make sure that my android dependencies are using the same / latest version.

Upgrade all the "com.android.support" dependencies to using the same version e.g 22, 23.

Clean and rebuild.

If the problem still exists then I suspect that the multi dex is causing this issue.

When you use multidex it is possible (in some odd cases) that the some files may be excluded in the process when building the main dex list.

Please follow the exact steps here, I had the same problem a while ago and this resolved it for me:

Unable to execute dex: method ID not in [0, 0xffff]: 65536

Community
  • 1
  • 1
AndroidEnthusiast
  • 6,557
  • 10
  • 42
  • 56