5

J'ai une application active sur Google Play Store. Depuis quelques mois, je reçois beaucoup de rapports de crash bizarres sur Play Console.Beaucoup de OutOfMemoryError sur les appareils Samsung Galaxy sur Android 7.x

Comme je ne peux pas coller toutes les données ici (il y a beaucoup de rapports de plantage) J'essaie de montrer un bon résumé. Informations détaillées sur demande.

appareils les plus touchés:

  • Samsung Galaxy A5 2016 (a5xelte)
  • Samsung Galaxy S5 (KLTE)
  • Samsung Galaxy A5 (2017) (a5y17lte)
  • Samsung Galaxy Note 3 (hlte)
  • Samsung Galaxy S5 Neo (s5neolte)
  • Samsung Galaxy S6 (zeroflte)

ND: Le premier dispositif est très critique par rapport aux autres

Types d'accidents:

  • java.lang.RuntimeException dans android.app.ActivityThread.performLaunchActivity
  • java.lang.OutOfMemoryError dans java.lang.StringFactory.newStringFromBytes
  • java.lang.OutOfMemoryError dans libcore.util.CharsetUtils.toUtf8Bytes
  • java.lang.OutOfMemoryError dans java.lang.StringFactory.newStringFromChars
  • java.lang.OutOfMemoryError dans java.lang.StringBuilder.toString
  • java.lang.OutOfMemoryError dans java.lang.StringFactory.newStringFromChars

versions Android: 7.0, 7.1 et 6.0 rarement

Je ne sais pas pourquoi cela se passe sur ces appareils, je ne sais pas comment Déboguer ces rapports et je n'ai rien trouvé de similaire sur StackOverflow ou d'autres sources. De l'aide?


EDIT, quelques stacktraces:

Samsung Galaxy A5 (2016) (a5xelte), 2048MB RAM, Android 7,0

java.lang.RuntimeException: 
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2984) 
    at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3045) 
    at android.app.ActivityThread.-wrap14 (ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1642) 
    at android.os.Handler.dispatchMessage (Handler.java:102) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1496) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1386) 

Samsung Galaxy S6 bord (zerolte), 3072 Mo de RAM , Android 7,0

java.lang.OutOfMemoryError: 
    at java.lang.StringFactory.newStringFromBytes (StringFactory.java:185) 
    at java.lang.StringFactory.newStringFromBytes (StringFactory.java:63) 
    at android.util.Base64.encodeToString (Base64.java:456) 
    at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 
    at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 
    at android.os.Handler.handleCallback (Handler.java:751) 
    at android.os.Handler.dispatchMessage (Handler.java:95) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410) 

Samsung Galaxy A5 (2016) (a5xelte), 2048MB RAM, Android 7,0

java.lang.OutOfMemoryError: 
    at libcore.util.CharsetUtils.toUtf8Bytes (CharsetUtils.java) 
    at java.lang.String.getBytes (String.java:879) 
    at java.lang.String.getBytes (String.java:851) 
    at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 
    at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 
    at android.os.Handler.handleCallback (Handler.java:751) 
    at android.os.Handler.dispatchMessage (Handler.java:95) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1496) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1386) 

EDIT 2: Je mis à jour les dépendances de firebase-ads mais j'ai toujours les mêmes accidents.De plus, j'ai eu un nouveau type d'accident dans cette version:

Samsung Galaxy A5 (2016) (a5xelte), 2048MB RAM, Android 7,0

java.lang.InternalError: 
    at java.lang.Thread.nativeCreate (Thread.java) 
    at java.lang.Thread.start (Thread.java:731) 
    at java.util.concurrent.ThreadPoolExecutor.addWorker (ThreadPoolExecutor.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.processWorkerExit (ThreadPoolExecutor.java:1009) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1151) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607) 
    at java.lang.Thread.run (Thread.java:762) 
+1

S'il vous plaît poster des traces de pile réelle complète, et pas seulement des messages d'erreur. – CommonsWare

+0

Edité avec quelques traces de pile – AndroidGuy

+1

Les deux derniers proviennent du code d'annonce de Play Services. Assurez-vous que vous êtes sur la dernière version de leur bibliothèque. – CommonsWare

Répondre

3

Je ne voulais pas résoudre cette façon, mais il semble à résoudre en ajoutant

largeHeap="true" 

dans mon Manifest. Qu'est-ce que j'ai compris: la mémoire des appareils Samsung Galaxy est mal optimisée par Samsung (le Galaxy A5 2016 a 2 Go de RAM, c'est plus que suffisant, mais sur Firebase je peux voir des MOO à cause de très peu de tas). Donc, j'ai décidé de régler les choses une fois pour toutes et j'ai mis grandHeap à vrai. Je ne suis pas fier de ce choix mais il semblait le seul viable.

Résultat: tous semble MOO être parti, pour l'instant

+0

Est-ce que cela a aidé avec la première erreur listée? RuntimeException dans android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2984) (Samsung Galaxy A5) – OferR

+0

@OferR vous devez publier la trace complète de la pile – AndroidGuy

+0

Ma question est de savoir si cette solution vous a aidé avec le problème que vous * aviez, comme indiqué dans * votre * question. La toute première trace de pile que vous avez listée. Ces erreurs ont-elles disparu après l'application de la fonction largeHeap = "true"? (Le problème que vous avez énuméré et auquel je me réfère est le premier.Il montre RuntimeException dans android.app.ActivityThread.performLaunchActivity où le reste de vos traces de pile montrent OutOfMemoryError) ... Merci ... – OferR

2

Regardons la dernière trace de la pile, dans les segments :

java.lang.OutOfMemoryError: 
    at libcore.util.CharsetUtils.toUtf8Bytes (CharsetUtils.java) 
    at java.lang.String.getBytes (String.java:879) 
    at java.lang.String.getBytes (String.java:851) 

donc, la chose spécifique qui a fait exploser convertissait un String à un byte[]. Soit vous avez très peu d'espace sur le tas, soit c'est une chaîne assez grosse.

at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 

Donc, nous voyons ici que la chose avec le String est WebView, via loadDataWithBaseURL(). Cela suggère que quelque chose appelle loadDataWithBaseURL() avec une URL plutôt grande. Une URL data: serait une possibilité.

at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 

Ici, nous avons six lignes qui proviennent toutes du même package Java. com.google.android.gms est le package de niveau supérieur pour une grande partie des services de lecture. Par conséquent, com.google.android.gms.ads est probablement l'une de leurs bibliothèques d'annonces. Je n'utilise pas beaucoup de Play Services, donc je ne suis pas expert sur exactement quelles marques de réseaux publicitaires ils ont encore et lesquels sont mappés à com.google.android.gms.ads. Donc, vérifiez vos bibliothèques de réseau publicitaire et assurez-vous que vous êtes sur le dernier et le plus grand que vous pouvez soutenir. Avec de la chance, c'est un bug qu'ils ont réparé dans leur bibliothèque quelque part le long de la ligne.

+0

Merci de m'avoir indiqué cela. J'utilisais une ancienne version sur 'firebase-core' et' firebase-ads'. J'espère que la dernière version corrige tous les problèmes avec les périphériques galaxy (même RuntimeException anonyme sur performLaunchActivity).Les doigts croisés :) – AndroidGuy

+1

@AndroidGuy: Pour cette première trace de pile, s'il n'y a rien de plus, il n'y a pas grand chose à faire. Il n'y a pas de caractéristiques d'identification pointant vers votre code ou une bibliothèque. Et, si c'est tout ce que vous obtenez, pensez à utiliser autre chose pour obtenir vos journaux de plantage. Habituellement, ces traces de pile ont plusieurs strophes ('RuntimeException' et un tas de lignes, suivi par' Caused by' et une autre exception et un tas de lignes). Votre vrai problème peut être rapporté dans une section ultérieure, mais si vous n'avez pas cette partie de la trace de la pile, vous n'avez pas de chance. – CommonsWare

+0

C'est le problème. Mais j'ai remarqué que tous les plantages comme celui de la première trace proviennent des appareils Galaxy sur Android 7.0. Cela me fait penser qu'il est lié au problème dans la bibliothèque 'firebase-ads' ou dans' firebase-core' (ils avaient tous deux le même ancien numéro de version). J'ai publié une mise à jour avec les deux bibliothèques à jour. Si cela ne fonctionne pas, j'ai placé 'firebase-crash' dans les dépendances, cela permettra de générer des rapports de crash sur la console firebase et j'espère que cela m'aidera avec des traces de pile plus précises. – AndroidGuy