Depuis récemment, mon application a commencé à contenir des messages d'erreur étranges dans les rapports de pré-lancement (générés automatiquement après le téléchargement sur le Play Store).
Ces rapports contiennent des exceptions telles que les suivantes:
Exception Java.lang.NoSuchMethodError: No interface method a(Landroid/Arch/lifecycle/e;Landroid/Arch/lifecycle/b$a;)V in class Landroid/Arch/lifecycle/GenericLifecycleObserver; or its super classes (declaration of 'Android.Arch.lifecycle.GenericLifecycleObserver' appears in /data/app/com.google.Android.apps.mtaas.crawler-1/base.apk)
Android.Arch.lifecycle.f$a.a (f.Java:326)
Android.Arch.lifecycle.f.a (f.Java:159)
com.firebase.ui.database.FirebaseRecyclerAdapter.<init> (FirebaseRecyclerAdapter.Java:40)
Et:
Exception Java.lang.NoSuchMethodError: No static method a(Landroid/app/Activity;)V in class Landroid/Arch/lifecycle/ReportFragment; or its super classes (declaration of 'Android.Arch.lifecycle.ReportFragment' appears in /data/app/com.google.Android.apps.mtaas.crawler-1/base.apk)
Android.Arch.lifecycle.LifecycleDispatcher$DispatcherActivityCallback.onActivityCreated (LifecycleDispatcher.Java:77)
Android.app.Application.dispatchActivityCreated (Application.Java:219)
Android.app.Activity.onCreate (Activity.Java:1040)
Android.support.v4.app.SupportActivity.onCreate (SupportActivity.Java:66)
Android.support.v4.app.FragmentActivity.onCreate (FragmentActivity.Java:285)
Android.support.v7.app.AppCompatActivity.onCreate (AppCompatActivity.Java:84)
Et:
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'int Android.Arch.core.internal.SafeIterableMap.size()' on a null object reference
at Android.Arch.lifecycle.LifecycleRegistry.getObserverCount(LifecycleRegistry.Java:204)
at Android.Arch.lifecycle.ProcessLifecycleOwner.b(ProcessLifecycleOwner.Java:154)
at Android.Arch.lifecycle.ProcessLifecycleOwner.a(ProcessLifecycleOwner.Java:100)
at Android.Arch.lifecycle.LifecycleRuntimeTrojanProvider.onCreate(LifecycleRuntimeTrojanProvider.Java:36)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1751)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1726)
at Android.app.ActivityThread.installProvider(ActivityThread.Java:6031)
... 10 more
La chose étrange est que mon application publiée semble fonctionner correctement sur de vrais appareils (les exceptions n'apparaissent que pendant les tests de pré-lancement).
J'ai essayé de revenir sur toutes les modifications (majeures) effectuées depuis la dernière version dans laquelle je n'avais pas de problème de pré-lancement: de l'API 26 à l'API 27, ancienne version des bibliothèques de support, pas de D8, etc. sur les 9 tests effectués, 1 ou 2 seulement réussissent, le reste échoue avec ce type d'erreur.
Que puis-je faire pour résoudre ce problème?
Je viens de recevoir une réponse du service d'assistance aux développeurs de Google Play. Ils étudient le problème.
Pour contourner le problème, vous pouvez revenir à la version précédente du robot en désactivant la nouvelle version.
Voici comment vous désabonner:
Après cela, les rapports de lancement apparaissent correctement à nouveau.
PS - Cela désactivera les tests par défaut effectués par Google Play et vous risquez d’omettre d’autres erreurs provenant d’une autre cause. Par conséquent, veillez à implémenter vos propres tests avant de les mettre en production.
L'erreur Gson a été provoquée par une régression. Le problème a été corrigé. Cela devrait fonctionner comme prévu après la publication du correctif dans un jour ou deux.