При обновлении библиотек сервисов Google Play происходит сбой из-за неправильного тега метаданных - PullRequest
0 голосов
/ 06 августа 2020

Недавно я обновил библиотеки сервисов 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 и закрывая приложение?

...