应用程序被杀死时NoClassDefFoundError:android.support.v4.app.NotificationCompatKitKat $ Builder但在应用程序运行时运行绝对正常

时间:2016-04-24 09:21:53

标签: android google-cloud-messaging

我正在尝试实施GCM推送通知,我能够在我的应用运行或在后台运行时实现GCM通知。但是当通过正在运行的应用程序列表滑动应用程序来杀死应用程序时,我在处理GCM通知并在通知托盘上触发通知的服务类中遇到异常:

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

以下是我与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>

下面是服务类GCMNotificationListenerService的onMessageRecieved方法:

    @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());
          }

当应用程序运行或在后台运行时,上面的代码运行得非常好,但是当应用程序被杀时,同样会抛出异常java.lang.NoClassDefFoundError:android.support.v4.app.NotificationCompatKitKat $ Builder。

我错过了什么吗?请帮助。

这是我的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'


}

1 个答案:

答案 0 :(得分:0)

我总是确保我的Android依赖项使用相同/最新版本。

将所有“com.android.support”依赖项升级为使用相同的版本,例如22,23。

清理并重建。

如果问题仍然存在,那么我怀疑多重dex导致了这个问题。

当您使用multidex时,可能(在某些奇怪的情况下)在构建主dex列表时可能会排除某些文件。

请按照此处的确切步骤进行操作,我前一段时间遇到了同样的问题,这样就解决了这个问题:

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