谷歌分析服务在安卓8.0上崩溃

17

我已经将我的应用程序升级以支持SDK 26,但现在在Android Oreo上运行时Google Analytics会导致崩溃:

Fatal Exception: java.lang.RuntimeException: Unable to start receiver com.google.android.gms.analytics.AnalyticsReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.gms.analytics.ANALYTICS_DISPATCH cmp=com.example.android/com.google.android.gms.analytics.AnalyticsService }: app is in background uid UidRecord{3f302e5 u0a107 RCVR idle procs:1 seq(0,0,0)} at android.app.ActivityThread.handleReceiver(ActivityThread.java:3259) at android.app.ActivityThread.-wrap17(Unknown Source) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at 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) Caused by java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.gms.analytics.ANALYTICS_DISPATCH cmp=com.example.android/com.google.android.gms.analytics.AnalyticsService }: app is in background uid UidRecord{3f302e5 u0a107 RCVR idle procs:1 seq(0,0,0)} at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505) at android.app.ContextImpl.startService(ContextImpl.java:1461) at android.content.ContextWrapper.startService(ContextWrapper.java:644) at android.content.ContextWrapper.startService(ContextWrapper.java:644) at com.google.android.gms.internal.zzaot.onReceive(Unknown Source:68) at com.google.android.gms.analytics.AnalyticsReceiver.onReceive(Unknown Source:11) at android.app.ActivityThread.handleReceiver(ActivityThread.java:3252) at android.app.ActivityThread.-wrap17(Unknown Source) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at 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"/>

过去24小时内,数百个奥利奥设备崩溃,可能只会影响安装过程。我将尝试添加android:permission="android.permission.BIND_JOB_SERVICE"到2个分析服务并查看结果,之后再报告。

如果需要更多信息,我将很乐意提供。谢谢


找不到任何在线信息,看起来你是第一个遇到这个问题的人。由于缺乏Android 8设备,我自己无法重现它,但这应该很快得到解答。 - Zoe stands with Ukraine
我们从Oreo设备的CampaignTrackingService中获得了类似的错误:非致命异常:java.lang.RuntimeException: 无法启动接收器com.google.android.gms.analytics.CampaignTrackingReceiver:java.lang.IllegalStateException:不允许启动服务Intent {cmp=com.overdrive.mobile.android.mediaconsole/com.google.android.gms.analytics.CampaignTrackingService(有额外信息)} - Robert Nekic
我已经向Google Analytics提出了这个问题:https://issuetracker.google.com/issues/65788222。有同样问题的人也可以加入他们的关注吗? - checklist
2个回答

12

我建议将play-services升级至11.4.0版本。在你的Gradle文件中添加以下内容:

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

Play服务修订版11.4.0,分析部分:

  • 添加了一个名为AnalyticsJobService的新类。此类提供对Android O的兼容性支持,并由分析功能用于上传数据。使用此类不需要任何操作,它会自动作为分析包的一部分添加。
  • 已弃用AnalyticsService类的getContext()方法。
  • 已弃用CampaignTrackingService类。

而且您需要获取权限。 android:permission="android.permission.BIND_JOB_SERVICE"

请参见下方链接: https://developers.google.com/android/reference/com/google/android/gms/analytics/AnalyticsJobService


4
为什么谷歌没有在奥利奥版本之前发布这个功能,这超出了我的理解范围。 - checklist
使用版本11.6.0,问题仍在发生。 - Abdul Hannan
3
使用15.0.2版本仍然存在这个问题 :'( - Steve
使用版本16.0.6仍然存在此问题。 - Glorin
3
仍在使用17.0.0版本时出现此问题。 - Manuel
使用版本17.0.0仍然存在此问题。 - Akhilesh Mani

4

由于 CampaignTrackingService 已被弃用,所以请从您的清单文件中删除此行。

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

但官方手册建议使用-https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-campaigns - Sergey Tokarev
@SergeyTokarev:文档中哪里说了推荐呢?我看了很多次都没找到。文档只说了1.从AndroidManifest.xml文件中删除Google Analytics接收器。-https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-implement - Bhavesh Rangani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接