Служба Google Analytics совершает сбой на Android Oreo

Я обновил свое приложение для поддержки SDK 26, и теперь Google Analytics вызывает сбои при работе на Android Oreo:

Fatal Exception: java.lang.RuntimeException: невозможно запустить приемник com.google.android.gms.analytics.AnalyticsReceiver: java.lang.IllegalStateException: не разрешено запускать сервис Intent { акт = com.google.android.gms.analytics.ANALYTICS_DISPATCH CMP = com.example.android/com.google.android.gms.analytics.AnalyticsService }: приложение находится в фоновом режиме uidRecord {3f302e5 u0a107 RCVR бездействует: 1 сл (0,0,0)}        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3259)        at android.app.ActivityThread.-wrap17 (Неизвестный источник)        at android.app.ActivityThread $H.handleMessage(ActivityThread.java:1677)        на android.os.Handler.dispatchMessage(Handler.java:105)        на android.os.Looper.loop(Looper.java:164)        at android.app.ActivityThread.main(ActivityThread.java:6541)        в java.lang.reflect.Method.invoke(Method.java)        at com.android.internal.os.Zygote $MethodAndArgsCaller.run(Zygote.java:240)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Вызывается java.lang.IllegalStateException: не разрешается запускать сервис Намерение { акт = com.google.android.gms.analytics.ANALYTICS_DISPATCH CMP = com.example.android/com.google.android.gms.analytics.AnalyticsService }: приложение находится в фоновом режиме uidRecord {3f302e5 u0a107 RCVR бездействует: 1 сл (0,0,0)}        at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505)        в android.app.ContextImpl.startService(ContextImpl.java:1461)        в android.content.ContextWrapper.startService(ContextWrapper.java:644)        в android.content.ContextWrapper.startService(ContextWrapper.java:644)        at com.google.android.gms.internal.zzaot.onReceive(Неизвестный источник: 68)        at com.google.android.gms.analytics.AnalyticsReceiver.onReceive(Неизвестно Источник: 11)        at android.app.ActivityThread.handleReceiver(ActivityThread.java:3252)        at android.app.ActivityThread.-wrap17 (Неизвестный источник)        at android.app.ActivityThread $H.handleMessage(ActivityThread.java:1677)        на android.os.Handler.dispatchMessage(Handler.java:105)        на android.os.Looper.loop(Looper.java:164)        at android.app.ActivityThread.main(ActivityThread.java:6541)        в java.lang.reflect.Method.invoke(Method.java)        at com.android.internal.os.Zygote $MethodAndArgsCaller.run(Zygote.java:240)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Это мой соответствующий манифест:

<meta-data
    android:name="com.google.android.gms.analytics.globalConfigResource"
    android:resource="@xml/analytics"/>
<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

<!-- Optionally, register AnalyticsReceiver and AnalyticsService to support background
     dispatching on non-Google Play devices -->
<receiver
    android:name="com.google.android.gms.analytics.AnalyticsReceiver"
    android:enabled="true">
    <intent-filter>
        <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH"/>
    </intent-filter>
</receiver>
<service
    android:name="com.google.android.gms.analytics.AnalyticsService"
    android:enabled="true"
    android:exported="false"/>

<!-- Optionally, register CampaignTrackingReceiver and CampaignTrackingService to enable
     installation campaign reporting -->
<receiver
    android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER"/>
    </intent-filter>
</receiver>
<service
    android:name="com.google.android.gms.analytics.CampaignTrackingService"
    android:exported="true"/>

Из-за этого из-за этого сотни устройств Oreo рушились за последние 24 часа. Кажется, это влияет только на установку. Я попытаюсь добавить android: permission = "android.permission.BIND_JOB_SERVICE" в 2 службы аналитики и посмотреть. Отчитается.

Буду рад предоставить дополнительную информацию, если потребуется. Благодаря

Ответ 1

Я рекомендую обновиться до версии play-services 11.4.0. Добавьте это в свой файл Gradle:

compile "com.google.android.gms:play-services-analytics:11.4.0

Из Play Services Revision 11.4.0, раздел аналитики:

  • Добавлен новый класс AnalyticsJobService. Этот класс обеспечивает поддержку совместимости для Android O и используется Google Analytics для загрузки данных. Для использования этого класса никаких действий не требуется, он добавляется автоматически как часть пакета Analytics.
  • Устаревший метод getContext() класса AnalyticsService.
  • Устаревший класс CampaignTrackingService.

а также вы должны получить разрешение. Android: разрешение = "android.permission.BIND_JOB_SERVICE"

См. Ниже https://developers.google.com/android/reference/com/google/android/gms/analytics/AnalyticsJobService.

Ответ 2

потому что CampaignTrackingService теперь устарел

просто удалите эту строку из манифеста

<service android:name="com.google.android.gms.analytics.CampaignTrackingService"
         android:exported="true"/>

Ответ 3

В приложении android O вам необходимо изменить рабочий процесс регистрации BroadcastReceiver. Больше не разрешено регистрировать неявные трансляции в манифесте, за исключением немногих, например, устанавливать референт и изменение состояния сети.

Приложения могут использовать Context.registerReceiver() во время выполнения, чтобы зарегистрировать приемник для любой широковещательной передачи, неявный или явный.

Поэтому просто зарегистрируйте их где-нибудь с Context.registerReceiver(), лучше в какой-то запланированной службе. проверьте статью