registro - token android studio
IncompatibleClassChangeError después de actualizar a Android Build Tools 25.1.6 GCM/FCM (15)
Desde que actualicé a Android SDK Tools 25.1.6 y Android Support Repository 32.0.0 (esta mañana), recibí el siguiente error, no cambié nada en mi código y todavía funciona en la computadora de mi colega (Android SDK Tools 25.1.1 + Android Support Repository 30.0.0).
java.lang.IncompatibleClassChangeError: The method
''java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)''
was expected to be of type virtual but instead was found to be of type direct
(declaration of ''java.lang.reflect.ArtMethod'' appears in /system/framework/core-libart.jar)
at com.google.android.gms.iid.zzd.zzeb(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.zzd.<init>(Unknown Source)
at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
at com.xxxxxxx.utils.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:55)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.os.HandlerThread.run(HandlerThread.java:61)
Aquí hay un fragmento de código que se bloquea:
InstanceID instanceID = InstanceID.getInstance(this); // <-- crash here
String instanceIDToken = instanceID.getToken(getString(R.string.google_app_id),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Es cuando trato de obtener un token de Google Cloud Messaging.
Estoy importando GCM en Gradle con servicios de juego divididos:
compile ''com.google.android.gms:play-services-analytics:9.0.0''
compile ''com.google.android.gms:play-services-maps:9.0.0''
compile ''com.google.android.gms:play-services-location:9.0.0''
compile ''com.google.android.gms:play-services-gcm:9.0.0''
compile ''com.google.android.gms:play-services-base:9.0.0''
EDITAR deshabilitar GCM solucionó el problema, así que supongo que debería migrar a Firebase Cloud Message
EDIT2 Mi dispositivo recibió Google Play Services 9.0 (ayer era 8.4.x). Ahora ya no se bloquea, pero se queja del descriptor del módulo
Failed to load module descriptor class: Didn''t find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
Firebase API initialization failure.
¿Alguien tiene un error similar y cómo solucionarlo?
FIJO
gracias especiales a @stegranet.
./gradlew -q app:dependencies --configuration compile
ayuda a identificar qué dependencias incluyen SDK 24.x
El problema principal es que algunas bibliotecas importan la última biblioteca de soporte utilizando el signo
+
lugar de una versión.
Esto causa el problema al incluir la última versión disponible.
Así que evite las dependencias de inicio de sesión;)
Al incluir todos los paquetes de servicios de juego
dependencies {
compile ''com.google.android.gms:play-services:9.0.0''
}
suprime el error, pero el resultado final es que la recuperación del token GCM no funciona ni podemos obtener una instancia del GCM. Entonces esta no es una solución en mis libros. Si alguien tiene alguna idea de lo que está sucediendo, por favor, ilumínenos.
EDITAR:
Reemplacé GCM con Firebase, actualicé Android Studio de 2.1 a 2.2 para solucionar el problema de ejecución instantánea con Firebase Analytics, actualicé las herramientas de compilación a 24-rc4 y las herramientas de plataforma a 24-rc3, y mantuve la versión de mi libs de soporte en 23.4.0. Todo parece estar funcionando bien ahora.
Bueno, recién estoy comenzando a usar Android.
Quería probar la creación de usuarios en
Firebase
siguiendo las instrucciones que se proporcionan en el sitio web de Firebase.
Agregué esas líneas en los lugares indicados.
classpath ''com.google.gms: google-services: 3.0.0''
compile ''com.google.firebase: firebase-auth: 9.2.0''
aplique el complemento: ''com.google.gms.google-services''
Pero el método createUserWithEmailAndPassword siguió mostrando fallas en la creación de usuarios.
Es por eso que visité esta pregunta para resolver mi problema.
Lo leí todo y apliqué cada consejo.
pero TI siguió mostrando fallas.
Pero cuando actualizo
Android Studio from 2.1.1 to 2.1.2
, podría crear usuarios con éxito.
Pero cuando verifiqué
logcat
, primero mostró
"Firebase API initialization failure"
y luego mostró "Inicialización de FirebaseApp exitosa".
07-09 18:53:37.012 13352-13352/jayground.firebasetest A/FirebaseApp: Firebase API initialization failure. How can I solve
¿esta? java.lang.reflect.InvocationTargetException en java.lang.reflect.Method.invokeNative (Método nativo) en java.lang.reflect.Method.invoke (Method.java:515) en com.google.firebase.FirebaseApp.zza (Desconocido Fuente) en com.google.firebase.FirebaseApp.initializeApp (Fuente desconocida) en com.google.firebase.FirebaseApp.initializeApp (Fuente desconocida) en com.google.firebase.FirebaseApp.zzeh (Fuente desconocida) en com.google.firebase .provider.FirebaseInitProvider.onCreate (Fuente desconocida) en android.content.ContentProvider.attachInfo (ContentProvider.java:1591) en android.content.ContentProvider.attachInfo (ContentProvider.java:1562) en com.google.firebase.provider.FirebaseInitProvider .attachInfo (fuente desconocida) en android.app.ActivityThread.installProvider (ActivityThread.java:5118) en android.app.ActivityThread.installContentProviders (ActivityThread.java:4713) en android.app.ActivityThread.handleBindApplica. (Activity ) en android.app.ActivityThread.access $ 1600 (ActivityThread.java:169) en y roid.app.ActivityThread $ H.handleMessage (ActivityThread.java:1340) en android.os.Handler.dispatchMessage (Handler.java:102) en android.os.Looper.loop (Looper.java:146) en android.app .ActivityThread.main (ActivityThread.java:5487) en java.lang.reflect.Method.invokeNative (Native Method) en java.lang.reflect.Method.invoke (Method.java:515) en com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1283) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099) en dalvik.system.NativeStart.main (Método nativo) Causado por: java.lang .NoSuchMethodError: com.google.android.gms.common.internal.zzaa.zzz en com.google.android.gms.measurement.internal.zzx.zzbd (Fuente desconocida) en com.google.android.gms.measurement.AppMeasurement .getInstance (Fuente desconocida) en java.lang.reflect.Method.invokeNative (Método nativo) en java.lang.reflect.Method.invoke (Method.java:515) en com.google.firebase.FirebaseApp.zza (Fuente desconocida ) en com.google.firebase.FirebaseApp.initializeApp (fuente desconocida) en com.google.firebase.FirebaseApp.initializeApp (fuente desconocida) en com.google.firebase.FirebaseApp.zzeh (fuente desconocida) en com.google.firebase.provider.FirebaseInitProvider.onCreate (fuente desconocida) en android.content.ContentProvider .attachInfo (ContentProvider.java:1591) en android.content.ContentProvider.attachInfo (ContentProvider.java:1562) en com.google.firebase.provider.FirebaseInitProvider.attachInfo (Fuente desconocida) en android.app.ActivityThread.installProvider (ActivityThread .java: 5118) en android.app.ActivityThread.installContentProviders (ActivityThread.java:4713) en android.app.ActivityThread.handleBindApplication (ActivityThread.java:4596) en android.app.ActivityThread.access $ 1600 (ActivityThread.java ) en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1340) en android.os.Handler.dispatchMessage (Handler.java:102) en android.os.Looper.loop (Looper.java:146) en android .app.ActivityThread.main (ActivityThread.java:5487) en java.lang.reflect.Method.invokeNative (Nati ve Method) en java.lang.reflect.Method.invoke (Method.java:515) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1283) en com.android.internal.os. ZygoteInit.main (ZygoteInit.java:1099) en dalvik.system.NativeStart.main (Método nativo) 07-09 18: 53: 37.022 13352-13352 / jayground.firebasetest I / FirebaseInitProvider: La inicialización de FirebaseApp fue exitosa
Después de un día completo en esto, puedo confirmar al 100% que la biblioteca Optimizely también está chocando de alguna manera y causando este error. Para ser específicos, estoy usando Optimizely a través de Fabric. Es imposible hacer que Firebase se inicialice mientras se usa Optimizely de esta manera (¿tal vez en todos los sentidos?).
He publicado en su github al respecto y los contactaré directamente ...
https://github.com/optimizely/Optimizely-Android-SDK/issues/11
He actualizado las dependencias de play-services en
build.gradle
dependencies {
compile ''com.google.android.gms:play-services:9.0.0''
}
Para solucionar el conflicto de versiones, ya sea actualizando la versión del complemento de servicios de google, tuve que actualizar los servicios de google en
build.gradle
en la carpeta raíz del proyecto
dependencies {
classpath ''com.google.gms:google-services:3.0.0''
}
Puede obtener la última actualización de los servicios de Google here .
Aunque no está evitando la excepción, ya no está bloqueando la aplicación en mi lado.
Actualizar
Podría evitar el bloqueo actualizando el estudio de Android desde el Canal Beta.
Luego actualice su
platform/build-tools
dentro del SDK.
La actualización a la última versión de los servicios de Google Play me solucionó el problema.
aplique el complemento: ''com.google.gms.google-services'' en la parte inferior ...
dependencies {
compile ''com.google.android.gms:play-services:9.0.0''
}
https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
Me he enfrentado a este problema y cambio la versión de mi aplicación gradle de 1.5.0 a 2.0.0.
cambiar classpath
com.android.tools.build:gradle:1.5.0
a
classpath ''com.android.tools.build:gradle:2.0.0
Me pasó por Facebook actualizándolo sdk y tuve
compile ''com.facebook.android:facebook-android-sdk:4.+''
reemplazándolo por
compile ''com.facebook.android:facebook-android-sdk:4.15.0''
resuelto mi problema
Ref: https://developers.facebook.com/docs/android/change-log-4.x
Para notificaciones push de Android con GCM 2016:
1) en Android SDK-> SDK Tools verifique los servicios de Google Play
2) en gradle agregue dependencias solo una línea:
compile ''com.google.android.gms:play-services-gcm:9.4.0''
(no hay un classpath específico y funciona para mí)
3) debe crear 3 clases (GCMPushReceiverService, GCMRegistrationIntentService, GCMTokenRefreshListenerService)
4.1) código para GCMTokenRefreshListenerService:
package com.myapp.android;
/**
* Created by skygirl on 02/08/2016.
*/
import android.content.Intent;
import com.google.android.gms.iid.InstanceIDListenerService;
public class GCMTokenRefreshListenerService extends InstanceIDListenerService {
//If the token is changed registering the device again
@Override
public void onTokenRefresh() {
Intent intent = new Intent(this, GCMRegistrationIntentService.class);
startService(intent);
}
}
4.2) Código para GCMRegistrationIntentService (cambie la entidad autorizada con su número de proyecto):
package com.myapp.android;
/**
* Created by Skygirl on 02/08/2016.
*/
import android.app.IntentService;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.google.android.gms.iid.InstanceID;
public class GCMRegistrationIntentService extends IntentService {
//Constants for success and errors
public static final String REGISTRATION_SUCCESS = "RegistrationSuccess";
public static final String REGISTRATION_ERROR = "RegistrationError";
//Class constructor
public GCMRegistrationIntentService() {
super("");
}
@Override
protected void onHandleIntent(Intent intent) {
//Registering gcm to the device
registerGCM();
}
private void registerGCM() {
//Registration complete intent initially null
Intent registrationComplete = null;
//Register token is also null
//we will get the token on successfull registration
String token = null;
try {
//Creating an instanceid
InstanceID instanceID = InstanceID.getInstance(this);
String authorizedEntity = "XXXXXXXXXX"; // your project number
//Getting the token from the instance id
token = instanceID.getToken(authorizedEntity, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
//Displaying the token in the log so that we can copy it to send push notification
//You can also extend the app by storing the token in to your server
Log.w("GCMRegIntentService", "token:" + token);
//on registration complete creating intent with success
registrationComplete = new Intent(REGISTRATION_SUCCESS);
//Putting the token to the intent
registrationComplete.putExtra("token", token);
} catch (Exception e) {
//If any error occurred
Log.w("GCMRegIntentService", "Registration error");
registrationComplete = new Intent(REGISTRATION_ERROR);
}
//Sending the broadcast that registration is completed
LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
}
}
4.3) Código para GCMPushReceiverService:
package com.myapp.android;
/**
* Created by Skygirl on 02/08/2016.
*/
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import com.google.android.gms.gcm.GcmListenerService;
//Class is extending GcmListenerService
public class GCMPushReceiverService extends GcmListenerService {
//This method will be called on every new message received
@Override
public void onMessageReceived(String from, Bundle data) {
//Getting the message from the bundle
String message = data.getString("message");
//Displaying a notiffication with the message
sendNotification(message);
}
//This method is generating a notification and displaying the notification
private void sendNotification(String message) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
int requestCode = 0;
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.your_logo)
.setContentTitle("Your Amazing Title")
.setContentText(message)
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pendingIntent);
noBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, noBuilder.build()); //0 = ID of notification
}
}
5) No olvides cambiar el nombre del paquete
6) En su actividad principal, pegue este código:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup view
setContentView(R.layout.main);
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
//When the broadcast received
//We are sending the broadcast from GCMRegistrationIntentService
public void onReceive(Context context, Intent intent) {
//If the broadcast has received with success
//that means device is registered successfully
if(intent.getAction().equals(GCMRegistrationIntentService.REGISTRATION_SUCCESS)){
//Getting the registration token from the intent
String token = intent.getStringExtra("token");
//Displaying the token as toast
Toast.makeText(getApplicationContext(), "Registration token:" + token, Toast.LENGTH_LONG).show();
//if the intent is not with success then displaying error messages
} else if(intent.getAction().equals(GCMRegistrationIntentService.REGISTRATION_ERROR)){
Toast.makeText(getApplicationContext(), "GCM registration error!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Error occurred", Toast.LENGTH_LONG).show();
}
}
};
//Checking play service is available or not
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
//if play service is not available
if(ConnectionResult.SUCCESS != resultCode) {
//If play service is supported but not installed
if(GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
//Displaying message that play service is not installed
Toast.makeText(getApplicationContext(), "Google Play Service is not install/enabled in this device!", Toast.LENGTH_LONG).show();
GooglePlayServicesUtil.showErrorNotification(resultCode, getApplicationContext());
//If play service is not supported
//Displaying an error message
} else {
Toast.makeText(getApplicationContext(), "This device does not support for Google Play Service!", Toast.LENGTH_LONG).show();
}
//If play service is available
} else {
//Starting intent to register device
Intent itent = new Intent(this, GCMRegistrationIntentService.class);
startService(itent);
}
}
//Unregistering receiver on activity paused
@Override
public void onPause() {
super.onPause();
Log.w("MainActivity", "onPause");
LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver);
}
@Override
public void onResume() {
super.onResume();
Log.w("MainActivity", "onResume");
LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
new IntentFilter(GCMRegistrationIntentService.REGISTRATION_SUCCESS));
LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
new IntentFilter(GCMRegistrationIntentService.REGISTRATION_ERROR));
}
7) En su AndroidManifest.xml agregue las siguientes líneas:
<uses-permission android:name="android.permission.INTERNET" />
8) en su consola logcat copie su token y péguelo en este site agregue su número de proyecto, su token y un mensaje. Es un buen trabajo para mí :)
Solución 1:
dependencies {
compile `com.android.support:appcompat-v7:23.4.0`
compile `com.android.support:support-v4:23.4.0`
compile `com.android.support:design:23.4.0`
compile `com.google.android.gms:play-services:9.0.0`
}
Solución 2: detectar incompatibles en la carpeta .idie / bibliotecas / .Algunas veces declara play-services-ads: 8.4.0 concurrente con play-services-gcm: 9.0.0. Debe anular en las bibliotecas incompatibles build.grade que detectó
Tuve el mismo problema y al volver de Android Support Repository 32.0.0 a Android Support Repository 31.0.0 lo resolvió.
Usé el árbol de dependencia de Gradle para resolver este error por mí.
Simplemente ejecute la
gradle -q app:dependencies --configuration compile
y verifique la salida para entradas como esta:
+--- com.mcxiaoke.viewpagerindicator:library:2.4.1
| /--- com.android.support:support-v4:+ -> 24.0.0-beta1 (*)
Como dijo
Diego Giorgini
, esta versión es demasiado alta (> = 24).
Así que actualice las dependencias en
build.gradle
como
compile(''com.mcxiaoke.viewpagerindicator:library:2.4.1'') {
exclude module: ''support-v4'';
}
compile ''com.android.support:support-v4:23.4.0''
Yo tuve el mismo problema. Actualicé las herramientas del SDK a 25.1.7 rc1, luego el problema desapareció.
el mío funcionó con lo siguiente:
nivel de aplicación gradle
dependencies {
compile ''com.android.support:appcompat-v7:23.4.0''
compile ''com.android.support:design:23.4.0''
compile ''com.google.android.gms:play-services:9.0.0''
}
gradle de nivel de raíz
dependencies {
classpath ''com.google.gms:google-services:3.0.0''
}
herramientas SDK actualizadas a 25.1.7 y solucionado este problema.
actualización 27 de mayo:
Acabamos de lanzar una actualización (
version 9.0.1
) para corregir la incompatibilidad que mencioné en mi primera edición.
Actualice sus dependencias y avísenos si esto sigue siendo un problema.
¡Gracias!
respuesta original 20 de mayo:
El problema que está experimentando se debe a una incompatibilidad entre
play-services / firebase sdk v9.0.0
y
com.android.support:appcompat-v7 >= 24
(la versión lanzada con android-N sdk)
Debería poder solucionarlo apuntando a una versión anterior de la biblioteca de soporte. Me gusta:
compile ''com.android.support:appcompat-v7:23.4.0''