2017-09-17 7 views
7

Ich habe meine App aktualisiert SDK 26 zu unterstützen und jetzt Google Analytics verursacht stürzt ab, wenn auf Android Oreo läuft:Google Analytics Service Intent stürzt auf Android Oreo

Fatal Exception: java.lang.RuntimeException: Kann nicht starten Empfänger com.google.android.gms.analytics.AnalyticsReceiver: java.lang.IllegalStateException: Nicht erlaubt Service Intent starten { act = com.google.android.gms.analytics.ANALYTICS_DISPATCH cmp = com.example.android /com.google.android.gms.analytics.AnalyticsService }: Die App befindet sich im Hintergrund. UidRecord {3f302e5 u0a107 RCVR Leerlaufprozedur: 1 seq (0,0,0)} bei android.app.ActivityThread.handleReceiver (ActivityThread.java:3259) bei android.app.ActivityThread.-wrap17 (unbekannte Quelle) bei android.app.ActivityThread $ H. handleMessage (ActivityThread.java:1677) bei android.os.Handler.dispatchMessage (Handler.java:105) bei android.os.Looper.loop (Looper.java:164) bei android.app.ActivityThread.main (ActivityThread.java:6541) bei java.lang.reflect.Method.invoke (Methode.java) bei com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) bei com.android. internal.os.ZygoteInit.main (ZygoteInit.java:767) Verursacht von java.lang.IllegalStateException: Nicht erlaubt zu starten Service Absicht { act = com.google.android.gms.analytics.ANALYTICS_DISPATCH cmp = com.beispiel.android/com.google.android.gms.analytics.AnalyticsService }: Die App befindet sich im Hintergrund uid UidRecord {3f302e5 u0a107 RCVR Leerlaufprozedur: 1 seq (0,0,0)} bei android.app.ContextImpl.startServiceCommon (ContextImpl.java:1505) bei android.app.ContextImpl.startService (ContextImpl.java:1461) bei android.content.ContextWrapper .startService (ContextWrapper.java:644) bei android.content.ContextWrapper.startService (ContextWrapper.java:644) bei com.google.android.gms.internal.zazzot.onReceive (Unbekannte Quelle: 68) at com. google.android.gms.analytics.AnalyticsReceiver.onReceive (Unbekannt Quelle: 11) bei android.app.ActivityThread.handleReceiver (ActivityThread.java:3252) bei android.app.ActivityThread.-wrap17 (Unknown Source) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1677) bei android.os.Handler.dispatchMessage (Handler.java:105) bei android.os.Looper.loop (Looper.java:164) bei android.app.ActivityThread.main (ActivityThread.java:6541) bei java. lang.reflect.Method.invoke (Methode.java) bei com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) bei com.android.internal.os.ZygoteInit.main (ZygoteInit. Java: 767)

Das ist mein relevant Manifest:

<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"/> 

Mit Hunderten von Oreo Geräte aufgrund dieser Absturz 24 Stunden vorbei. Scheint sich nur auf die Installation auszuwirken. Ich werde versuchen, android: permission = "android.permission.BIND_JOB_SERVICE" zu den 2 Analytics-Diensten hinzuzufügen und zu sehen. Werde melden.

Ich werde glücklich sein, mehr Informationen bei Bedarf zur Verfügung zu stellen. Danke

+0

kann nicht online finden etwas, sieht aus wie Sie die ersten sind, dieses Problem zu begegnen. Ich kann es nicht reproduzieren, da es an Android 8-Geräten mangelt, obwohl dies bald beantwortet werden sollte. Nicht-tödliche Ausnahme:: java.lang.RuntimeException: – Zoe

+0

Wir von Oreo Geräte für die CampaignTrackingService einen ähnlichen Fehler bekommen kann nicht Empfänger com.google.android.gms.analytics.CampaignTrackingReceiver starten: java.lang.IllegalStateException: Ich darf den Dienst nicht starten Absicht {cmp = com.overdrive.mobile.android.mediaconsole/com.google.android.gms.analytics.CampaignTrackingService (hat Extras)} –

+0

Ich habe das Problem mit Google Analytics angesprochen: https: // ittetracker .google.com/issues/65788222. Jeder, der dieses Problem hat, kann seine Bedenken hinzufügen? – checklist

Antwort

9

Ich empfehle ein Upgrade auf Play-Services-Version 11.4.0. Fügen Sie diese in Ihrem Gradle Datei:

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

Vom Play Services Revision 11.4.0, Analytik Abschnitt:

  • Added eine neue Klasse AnalyticsJobService. Diese Klasse bietet Kompatibilität für Android O und wird von Analytics zum Hochladen von Daten verwendet. Es ist keine Aktion erforderlich, um diese Klasse zu verwenden. Sie wird automatisch als Teil des Analytics-Pakets hinzugefügt.
  • Veraltet die getContext() Methode der AnalyticsService Klasse.
  • Veraltete die CampaignTrackingService Klasse.
+3

Warum hat Google diesen PRIOR zu Oreo nicht veröffentlicht? – checklist

0

In Android O-Anwendung müssen Sie den Registrierungs-Workflow Ihres BroadcastReceivers ändern.Es ist nicht länger erlaubt, implizite Broadcasts im Manifest zu registrieren, außer wenigen, wie Install Referer und Network State Change.

Anwendungen können Context.registerReceiver() zur Laufzeit verwenden, um einen Empfänger für jede Sendung, ob implizit oder explizit zu registrieren.

Also registrieren Sie sie einfach irgendwo mit Context.registerReceiver(), besser in einigen geplanten Service. überprüfen Sie diese article

+2

Danke. Aber sollte die Google Analytics-Bibliothek das nicht tun? Ich konnte in ihrem Dokument nichts darüber finden. – checklist

+0

@checklist, vielleicht haben sich doc für analytics noch nicht geändert. Eine andere Version, warum es nicht funktioniert - Dienst darf nicht in Hintergrundanwendung ausgeführt werden [zu] (https://developer.android.com/about/versions/oreo/background.html#services). Sie können es testen, wenn Sie einen Dienst mit einer Vordergrundbenachrichtigung starten, möglicherweise wird die Analyse auf diese Weise nicht abstürzen, wenn dies zutrifft - Sie müssen warten, bis sie die Version der Analyse aktualisieren. Und stellen Sie sicher, dass Sie das Neueste verwenden. –

0

weil CampaignTrackingService ist jetzt Veraltete

nur diese Zeile entfernen aus Ihrem Manifest

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