0

I am receiving at run time: Class not found when unmarshalling: com.google.android.gms.common.api.Scope and Class not found when unmarshalling: com.google.android.gms.auth.api.signin.internal.SignInConfiguration errors when creating an release version of my app.
My build.gradle

          minSdkVersion 21
        targetSdkVersion 23
        versionCode 10
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        testCompile 'junit:junit:4.12'
        // compile 'com.googlecode.java-diff-utils:diffutils:1.3.0   (This is inside primke)'
        compile 'com.github.thorbenprimke:realm-recyclerview:0.9.20'
        compile 'com.android.support:recyclerview-v7:24.0.0'
        compile 'com.android.support:design:24.0.0'
        compile 'com.android.support:support-v4:24.0.0'
        compile 'com.android.support:appcompat-v7:24.0.0'
        compile 'com.google.firebase:firebase-auth:9.0.2'
        compile 'com.google.android.gms:play-services-auth:9.0.2'
        compile 'com.android.support:cardview-v7:24.0.0'
        compile 'com.google.android.gms:play-services-drive:9.0.2'
        compile 'com.google.android.gms:play-services-gcm:9.0.2'

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

I have attempted to -keep these classes but it doesn't seem to take as the error still exists. Perhaps it is in there twice somehow. I keep adding things to the rule.pro file based on searches for similar problems and now have a "kitchen sink" rules file. I'm sure there is redundancy in the file and perhaps that is part of the problem. Any assistance would be greatly appreciated. I'm new at this so a point to examples is also appreciated.

-keepattributes Signature
-keepattributes *Annotation*
-keep class com.google.android.gms.auth.api.signin.internal.SignInConfiguration
-keep class com.google.android.gms.common.api.Scope

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
    public static final *** NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
    @com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keep interface com.google.** { *;}

-keep class * extends com.google.api.client.json.GenericJson {
*;
}
-dontwarn com.google.**
-dontwarn com.google.android.gms.**
-dontwarn com.google.android.gms.R**
-dontnote com.google.android.gms.cast.**
-dontnote com.google.android.gms.common.**
-dontnote com.google.android.gms.dynamic.**
-dontnote com.google.android.gms.internal.**
# Keep all enum values and valueOf methods. See
# http://proguard.sourceforge.net/index.html#manual/examples.html
# for the reason for this. Also, see http://crbug.com/248037.
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
# Preserve sufficient information for simple Serializable classes.
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
-keep class com.android.vending.billing.**
-keep public class com.google.android.gms.**


-keep class com.google.** {*;}
-keep class com.newrelic.** {*;}
-keep class com.google.android.gms.auth.*
-keep class com.google.android.gms.auth.api.Auth
-keep class com.google.android.gms.auth.api.signin.GoogleSignInAccount
-keep class com.google.android.gms.auth.api.signin.GoogleSignInOptions
-keep class com.google.android.gms.auth.api.signin.GoogleSignInResult
-keep class com.google.android.gms.common.ConnectionResult
-keep class com.google.android.gms.common.GoogleApiAvailability
-keep class com.google.android.gms.common.Scopes
-keep class com.google.android.gms.common.SignInButton
-keep class com.google.android.gms.common.api.GoogleApiClient
-keep class com.google.android.gms.common.api.OptionalPendingResult
-keep class com.google.android.gms.common.api.ResultCallback
-keep class com.google.android.gms.common.api.Status
-keep class com.google.api.services.drive.**
-keep class com.google.android.gms.drive.Drive
-keep class com.google.android.gms.drive.DriveApi
-keep class com.google.android.gms.drive.DriveContents
-keep class com.google.android.gms.drive.DriveFile
-keep class com.google.android.gms.drive.DriveFolder
-keep class com.google.android.gms.tasks.OnCompleteListener
-keep class com.google.android.gms.tasks.Task
-keep class com.google.firebase.auth.AuthResult
-keep class com.google.firebase.auth.FirebaseAuth
-keep class com.google.firebase.auth.FirebaseUser
-keep class com.google.firebase.auth.GoogleAuthProvider
-keep class com.google.firebase.auth.AuthCredential

Here's my build.gradle

      dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath "io.realm:realm-gradle-plugin:1.0.1"
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
        maven { url "https://jitpack.io" }
        mavenLocal()}
    }

I thought that maybe I could use the Jack and Jill method but ran into Complier error so I quit there. Suggestions or Solutions?

T_Dun
  • 101
  • 1
  • 10
  • This answer: http://stackoverflow.com/questions/36309169/classnotfoundexception-for-signinconfiguration-when-signing-in-with-google Got me started into a Samsung verses something else and it was true. Motorola didn't have error Samsung did. Good news is that my code runs even with the error my actual problem was elsewhere. I did take note of the answer below and that helped to clean up my code quite a bit. – T_Dun Jul 08 '16 at 17:24

1 Answers1

0

You seem to have some duplicate rules, if you add a rule like this:

-keep class com.google.** {*;}

you do not need any other rule that includes com.google.*, so you can remove all of these:

-keep class com.google.android.gms.auth.*
-keep class com.google.android.gms.auth.api.Auth
-keep class com.google.android.gms.auth.api.signin.GoogleSignInAccount
-keep class com.google.android.gms.auth.api.signin.GoogleSignInOptions
-keep class com.google.android.gms.auth.api.signin.GoogleSignInResult
-keep class com.google.android.gms.common.ConnectionResult
-keep class com.google.android.gms.common.GoogleApiAvailability
-keep class com.google.android.gms.common.Scopes
-keep class com.google.android.gms.common.SignInButton
-keep class com.google.android.gms.common.api.GoogleApiClient
-keep class com.google.android.gms.common.api.OptionalPendingResult
-keep class com.google.android.gms.common.api.ResultCallback
-keep class com.google.android.gms.common.api.Status
-keep class com.google.api.services.drive.**
-keep class com.google.android.gms.drive.Drive
-keep class com.google.android.gms.drive.DriveApi
-keep class com.google.android.gms.drive.DriveContents
-keep class com.google.android.gms.drive.DriveFile
-keep class com.google.android.gms.drive.DriveFolder
-keep class com.google.android.gms.tasks.OnCompleteListener
-keep class com.google.android.gms.tasks.Task
-keep class com.google.firebase.auth.AuthResult
-keep class com.google.firebase.auth.FirebaseAuth
-keep class com.google.firebase.auth.FirebaseUser
-keep class com.google.firebase.auth.GoogleAuthProvider
-keep class com.google.firebase.auth.AuthCredential

Furthermore, you are using firebase & play-services 9.0.2, but I would suggest upgrading to 9.2.0:

compile 'com.google.firebase:firebase-auth:9.2.0'
compile 'com.google.android.gms:play-services-auth:9.2.0'
compile 'com.google.android.gms:play-services-drive:9.2.0'
compile 'com.google.android.gms:play-services-gcm:9.2.0'

There have been reports that release 9.0.2 is missing some rules to keep internal classes, so it wont work reliably with ProGuard.

T. Neidhart
  • 6,060
  • 2
  • 15
  • 38