ClassNotFoundException para SignInConfiguration al iniciar sesión con Google

Estoy implementando el inicio de sesión de Google en una aplicación. El inicio de sesión en sí parece funcionar bien, pero en el momento en que solicito el correo electrónico del usuario o el token de ID, veo el siguiente rastreo de pila en el registro y el estado de GoogleSignInResult como Status{statusCode=unknown status code: 12500, resolution=null}

 03-30 13:59:09.821 3634-4322/? E/Parcel: Class not found when unmarshalling: com.google.android.gms.auth.api.signin.internal.SignInConfiguration java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:309) at java.lang.Class.forName(Class.java:273) at android.os.Parcel.readParcelableCreator(Parcel.java:2281) at android.os.Parcel.readParcelable(Parcel.java:2245) at android.os.Parcel.readValue(Parcel.java:2152) at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) at android.os.BaseBundle.unparcel(BaseBundle.java:221) at android.os.BaseBundle.getString(BaseBundle.java:918) at android.content.Intent.getStringExtra(Intent.java:5767) at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2365) at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1848) at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:5809) at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:5593) at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:142) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3786) at android.os.Binder.execTransact(Binder.java:461) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.signin.internal.SignInConfiguration" on path: DexPathList[[directory "."],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 java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:309) at java.lang.Class.forName(Class.java:273) at android.os.Parcel.readParcelableCreator(Parcel.java:2281) at android.os.Parcel.readParcelable(Parcel.java:2245) at android.os.Parcel.readValue(Parcel.java:2152) at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) at android.os.BaseBundle.unparcel(BaseBundle.java:221) at android.os.BaseBundle.getString(BaseBundle.java:918) at android.content.Intent.getStringExtra(Intent.java:5767) at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2365) at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1848) at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:5809) at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:5593) at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:142) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3786) at android.os.Binder.execTransact(Binder.java:461) Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration 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) ... 18 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Este es el código que estoy usando para intentar iniciar sesión en el usuario:

 public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { private final static String TAG = SignInActivity.class.getSimpleName(); protected final static int REQUEST_CODE_GOOGLE_LOGIN = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) // .requestEmail() // Causes ClassNotFoundException for SignInConfiguration // .requestIdToken(getString(R.string.google_server_client_id)) // Causes ClassNotFoundException for SignInConfiguration .build(); final GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions) .build(); SignInButton signInButton = (SignInButton) findViewById(R.id.signInButton); signInButton.setScopes(googleSignInOptions.getScopeArray()); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); startActivityForResult(signInIntent, REQUEST_CODE_GOOGLE_LOGIN); } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_GOOGLE_LOGIN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleGoogleSignInResult(result); } } protected void handleGoogleSignInResult(GoogleSignInResult googleSignInResult) { Logging.debug(TAG, "handleGoogleSignInResult(" + googleSignInResult + ")"); if (googleSignInResult.isSuccess()) { GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount(); final String idToken = googleSignInAccount.getIdToken(); if (idToken != null) { Toast.makeText(SignInActivity.this, "Successfully logged in.", Toast.LENGTH_SHORT).show(); // Do fun stuff here } else { Log.e(TAG, "ID token was null. Unable to sign in user."); } } else { Log.e(TAG, "Failed to sign in with Google. Status:" + googleSignInResult.getStatus()); } } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Log.e(TAG, "onConnectionFailed(" + connectionResult + ")"); } } 

¿Qué estoy haciendo mal?

Estoy utilizando la siguiente dependencia gradle:

 compile 'com.google.android.gms:play-services-auth:8.4.0' 

La excepción registrada parece provenir de otro proceso. Incluso he intentado instanciar com.google.android.gms.auth.api.signin.internal.SignInConfiguration mi actividad para estar seguro de que tengo la clase accesible.

Esto está sucediendo en la compilación de depuración que no utiliza proguard.

Creo que esto podría ser un rojo arenque. Tuve el mismo rastro de pila y he pasado un montón de tiempo tratando de determinar la causa. Me encontré con un post similar, mientras que la investigación que indicó que podría ser una única excepción de Samsung que podría ser ignorar (inspeccionar las intenciones en tránsito o algo). Por supuesto, lo intenté en un dispositivo HTCOne y la excepción ya no apareció. Todavía tenía los mismos problemas generales de Google Auth, pero al menos podría pasar a la cuestión real que (al menos para mí) parece ser SHA / Cert / Account / Signing relacionados. De todos modos – espero que esto ayude (algo para comprobar de todos modos)

Solucioné mi problema poniendo "Clave de firma de aplicación" en OAuth 2.0 Client ID SHA-1 huella dactilar en lugar de clave firmada que se generó mediante keytool . Si has marcado la "Firma de la aplicación de Google Play" en Google Play Console, la clave firmada habitual no funcionará. Echa un vistazo a la clave de firma de la aplicación en la Consola de Google Play> Firma de la aplicación> Certificado de firma de la aplicación y luego copia la huella digital del certificado SHA-1 y pega en la consola de la API de Google ID del cliente OAuth 2.0. Funcionó para mí!

  • Iniciar sesión con google para android no funciona en la versión apk
  • Libgdx - IllegalStateException en una ubicación desconocida
  • Proyecto de API carece de ID de proyecto en Google Developers Console
  • Mostrar el selector de cuenta cada vez con GoogleSignInApi
  • Cómo evitar TagManager "IllegalStateException: Resultados ya se han establecido"
  • Android Google Services nuevo archivo de configuración preguntas
  • Error al agregar la biblioteca de facturación en la aplicación
  • Más una opción de botón compartido hace una entrada vacía
  • Problema de ProGuard con Google Play Service y Firebase
  • SetVisibleActivities undefined
  • No se puede usar android: icon = "@ mipmap / ic_launcher" en Manifest after play services 7.5.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.