SecurityException: Invocación de Binder a una interfaz incorrecta en APK firmado
Estoy desarrollando una aplicación para conocer la ubicación. Integré los servicios de ubicación de Google Play y Google Maps en mi aplicación. Mi aplicación se ejecuta sin un problema en el modo de depuración. Cuando genera un APK firmado en modo de liberación y ejecuto la aplicación, se bloquea en el inicio con la siguiente excepción:
Process: com.example.akif, PID: 4233 java.lang.RuntimeException: Unable to resume activity {com.example.akif/com.example.akif.activities.MainActivity}: java.lang.SecurityException: Binder invocation to an incorrect interface at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3400) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Caused by: java.lang.SecurityException: Binder invocation to an incorrect interface at android.os.Parcel.nativeEnforceInterface(Native Method) at android.os.Parcel.enforceInterface(Parcel.java:482) at vz.onTransact(:com.google.android.gms.DynamiteModulesB:81) at android.os.Binder.transact(Binder.java:499) at com.google.android.gms.maps.a.bt.c(Unknown) at com.google.android.gms.maps.ib(Unknown) at com.google.android.gms.bdb(Unknown) at com.google.android.gms.bja(Unknown) at com.google.android.gms.maps.hb(Unknown) at com.google.android.gms.maps.ha(Unknown) at com.google.android.gms.bac(Unknown) at com.google.android.gms.bae(Unknown) at com.google.android.gms.maps.gf(Unknown) at android.support.v4.app.k.ay(Unknown) at android.support.v4.app.xl(Unknown) at android.support.v4.app.ax.h(Unknown) at android.support.v4.app.ax.i(Unknown) at android.support.v4.app.ax.run(Unknown) at android.support.v4.app.x.ae(Unknown) at android.support.v4.app.i.aa(Unknown) at android.support.v4.app.a.onPostResume(Unknown) at android.support.v7.app.a.onPostResume(Unknown) at android.app.Activity.performResume(Activity.java:6792) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
Me di cuenta siguiendo los logs en cada método de ciclo de vida que esto sucede en el método onResume de mi fragmento donde compruebo la disponibilidad de Google Play Services de la siguiente manera:
- El anuncio de AdMob no se cargará. Error 2. Funcionó antes pero de repente se detuvo
- Error de generación al usar clase interna estática
- Detección de líneas en una imagen de hoja musical en Android
- ¿Cómo habilitar los menús predeterminados por defecto en la vista web android?
- No detener el bucle con super.oncreate () y extender MainActivity
@Override public void onResume() { Log.debug(getClass(), "onResume()"); GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); int googlePlayServicesAvailabilityResult = googleApiAvailability.isGooglePlayServicesAvailable(getContext()); if (googlePlayServicesAvailabilityResult != ConnectionResult.SUCCESS) { if (!googleApiAvailability.isUserResolvableError(googlePlayServicesAvailabilityResult)) { Toast.makeText(getContext(), "Your device doesn't support Google Play location services. This application cannot run without it!", Toast.LENGTH_LONG).show(); getActivity().finish(); return; } Dialog errorDialog = googleApiAvailability.getErrorDialog(getActivity(), googlePlayServicesAvailabilityResult, GOOGLE_PLAY_SERVICES_REQUEST_CODE); if (errorDialog != null) { errorDialog.setCancelable(false); errorDialog.setCanceledOnTouchOutside(false); errorDialog.setOnDismissListener((DialogInterface dialogInterface) -> { Toast.makeText(getContext(), "You need Google Play location services to run this application!", Toast.LENGTH_LONG).show(); getActivity().finish(); }); errorDialog.show(); } } else if (googleApiClient.isConnected() && !isUpdatingLocation) { startLocationUpdates(); } super.onResume(); }
Mi archivo gradle tiene el siguiente aspecto:
apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { applicationId "com.example.akif" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "0.1" jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { debug { applicationIdSuffix '.test' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:cardview-v7:24.2.0' compile 'com.android.support:design:24.2.0' compile 'com.android.support:preference-v7:24.2.0' compile 'com.google.android.gms:play-services-location:9.4.0' compile 'com.google.android.gms:play-services-maps:9.4.0' compile 'com.github.mehmetakiftutuncu:toolbelt:1.1.0' compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'joda-time:joda-time:2.9.4' }
Tengo dos claves de la API de Google Maps configuradas según mis nombres de paquetes com.example.akif.test
y com.example.akif
respectivamente, para los modos de depuración y liberación. Por lo tanto, no creo que esté relacionado con los nombres de los paquetes, pero de nuevo, podría muy bien ser sobre eso, ya que no he entendido nada del error.
¿Alguna idea de lo que está pasando?
- ¿Es posible cargar / crear bases de datos en sdcard usando phoneGap en Android?
- Firewall de Android con VpnService
- Práctica de exit (0) en C y System.exit (0) en Java
- No se pudo leer la fila 0, col -1 de CursorWindow?
- Programáticamente Creado Android ProgressBar (Círculo) Invisible En Xoom (Trabaja en Cualquier Parte!)
- Error de eclipse con complementos después de la actualización
- Cómo borrar el texto en edittext
- ¿Cómo puedo agregar un "Proyecto de biblioteca" en IntelliJ IDEA?
Después de hacer un montón de investigación con casi ningún resultado, pude resolver el problema con las siguientes reglas de Proguard:
-keep public class com.google.android.gms.* { public *; } -dontwarn com.google.android.gms.**
Todavía no sé la verdadera razón por la que tuve este problema, pero parece arreglado con esto.
Espero que esto ayude.
- Resumen de cambios para cada nivel de API?
- Se ha producido un error en la ejecución de la prueba: La ejecución de la instrumentación ha fallado debido a que "Proceso se ha estropeado". Al probar varias actividades de Android