В отчете о сбое Crashlytics упоминается XposedBridge - PullRequest
2 голосов
/ 20 мая 2019

Вчера я выпустил обновление для приложения Android, и сегодня я вижу несколько журналов сбоев в Crashlytics:

   Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MyWebViewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
          at android.app.ActivityThread.-wrap12(ActivityThread.java)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:154)
          at android.app.ActivityThread.main(ActivityThread.java:6119)
          at java.lang.reflect.Method.invoke(Method.java)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
          at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)

   Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
          at com.example.myapp.MyWebViewActivity.onCreate(MyWebViewActivity.java:77)
          at android.app.Activity.performCreate(Activity.java:6679)
          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
          at android.app.ActivityThread.-wrap12(ActivityThread.java)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
          at android.os.Handler.dispatchMessage(Handler.java:102)
          at android.os.Looper.loop(Looper.java:154)
          at android.app.ActivityThread.main(ActivityThread.java:6119)
          at java.lang.reflect.Method.invoke(Method.java)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
          at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107) 

Внизу в этом отчете упоминается XposedBridge, что я нахожу немного странным.Это вызвано тем, что кто-то экспериментирует с моим приложением, используя платформу Xposed?Или это может случиться с «обычным пользователем»?Crashlytics говорит, что проблема уже затронула 3 пользователей, но я скептически отношусь, поскольку у них всех одинаковая модель телефона и версия Android (Motorola Nexus 6, Android 7.1.1), и они произошли в течение 10 минут друг от друга.

NPE вызывается getIntent().getStringExtra("some_string").equals("another_string") в методе onCreate, хотя я устанавливаю "some_string" во всех местах, где я создаю это действие.

Так что мне интересноМожет ли такой сбой быть результатом чего-то другого, кроме пользователя, который экспериментирует с Xposed?Тоесть я должен воспринимать это всерьез или нет?

1 Ответ

0 голосов
/ 29 мая 2019

Как правило, наличие XposedBridge в трассировке стека означает, что приложение работает на устройстве с установленной XPposed.XPposed изменяет всю систему Dalvik VM, даже если ваше приложение не модифицируется никаким модулем XPposed.

У меня нет большого опыта работы с Crashlytics, однако «3 пользователя» я бы интерпретировал как один пользователь, дважды очистивший данные приложения.

В любом случае, я всегда использовал бы безопасное кодирование,поэтому ваш вызов

getIntent().getStringExtra("some_string").equals("another_string")

должен быть переформулирован так:

"another_string".equals(getIntent().getStringExtra("some_string"))

Этот способ может быть немного незнакомым для чтения, но он безопасен для исключения NullPointerException в случае, если текущее намерение неимеет значение "some_string".

...