Недавно я обновил библиотеки сервисов Google Play в своем приложении Android с 11.0.4 до 17.0.0. После запуска обновления приложения, содержащего это, я вижу, что большое количество пользователей получают этот cra sh, в основном в фоновом режиме -
E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandler
Process: com.xxx.xxx.xxx, PID: 15055
java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 11020000 but found 12451000. You must have the following declaration within the <application> element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:19)
at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)
at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)
at com.google.android.gms.common.internal.GoogleApiAvailabilityCache.getClientAvailability(Unknown Source:23)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.connect(Unknown Source:216)
at com.google.android.gms.common.api.internal.GoogleApiManager.zab(Unknown Source:47)
at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(Unknown Source:173)
at android.os.Handler.dispatchMessage(Handler.java:103)
at com.google.android.gms.internal.base.zap.dispatchMessage(Unknown Source:8)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
1102000 соответствует 11.0.4, а 12451000 соответствует 17,0 .0.
Я проверил свой манифест в анализаторе APK android studio, и это объявление правильно присутствовало в объединенном манифесте под элементом приложения. Я также проверил ресурсы (resources.ars c) для google_play_services_version, и «найденное» значение было ожидаемым 12451000.
Я также просмотрел байт-код для GooglePlayServicesUtilLight, и жестко запрограммированное «ожидаемое» значение было также 12451000, а не 1102000, как написано в журнале.
Я почти уверен, что и «найденное», и «ожидаемое» значение взяты из play-services-basement, а «found» исходит из заявленного значения для google_play_services_version и упоминается в его манифесте, а «ожидаемый» жестко закодирован в классе GooglePlayServicesUtilLight. Как это возможно, что они разные во время выполнения?
Это известная проблема при обновлении? Похоже, что большинство пользователей сталкиваются с этим только один раз. Возможно ли, что это вызвано отсутствием у пользователя последней версии сервисов Google Play? Однако более половины пользователей используют Android 10.
Есть ли способ уменьшить сбои? Возможно, перехватывая исключение из потока GoogleApiHandler и закрывая приложение?