19

Unsere App erhält einige verschiedene SecurityException Berichte aus unserer Crash-Report-Software. Hier ist ein Stacktrace des Absturzes: (? Ist dieser Thread-IDs oder etwas)SecurityException: Parcel.readException kommt von Google Analytics-Code

java.lang.SecurityException: Unable to find app for caller [email protected] (pid=17925) when registering receiver [email protected] 
    at android.os.Parcel.readException(Parcel.java:1431) 
    at android.os.Parcel.readException(Parcel.java:1385) 
    at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:2466) 
    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1717) 
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1685) 
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1679) 
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:453) 
    at com.google.android.gms.analytics.q.v(Unknown Source) 
    at com.google.android.gms.analytics.r.cF(Unknown Source) 
    at com.google.android.gms.analytics.r.cH(Unknown Source) 
    at com.google.android.gms.analytics.s.cO(Unknown Source) 
    at com.google.android.gms.analytics.s.cP(Unknown Source) 
    at com.google.android.gms.analytics.s.d(Unknown Source) 
    at com.google.android.gms.analytics.s$e.run(Unknown Source) 
    at java.util.Timer$TimerImpl.run(Timer.java:284) 

Der Stack-Trace ist immer das gleiche, nur das einzige, was zu ändern scheint, [email protected] (pid=9103) und [email protected] haben unterschiedliche Zahlen auf ihnen

Nun scheint diese Ausnahme auf Vorsatz Größe verknüpft werden (siehe die folgenden Links)

Ist das der einzige Grund? Wenn ja, wie verursacht mein Code dies, wenn es nur von google analytics Code zu kommen scheint? Benutze ich GA falsch? Ich mache nicht viel mehr als einen Tracker zu machen.

EDIT

Dies ist, wie ich meine tracker erschaffe. Ich habe einen singleton Tracker in meinem Anwendungsobjekt

Tracker appTracker; 
synchronized Tracker getTracker() 
{ 
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
    if (appTracker == null) 
    { 
     appTracker = analytics.newTracker([some key]); 
     appTracker.enableAdvertisingIdCollection(true); 
     analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE); 
    } 


    return appTracker; 
} 

Da ist in meinem BaseActivity Ich habe den folgenden Code:

public void initAnalytics() { 

    if (Global.TRACKING_ENABLED) { 
     mTracker = app.getTracker(); 
    } 
} 

public void sendCommerceData(Map<String, String> params) 
{ 
    mTracker.send(params); 
} 

public void sendTrackViewData(String _path) 
{ 
    mTracker.setScreenName(_path); 
    mTracker.send(new HitBuilders.AppViewBuilder().build()); 
} 

public void sendEventData(String category, String action, String label, long value) 
{ 
    mTracker.send(new HitBuilders.EventBuilder() 
      .setCategory(category) 
      .setAction(action) 
      .setLabel(label) 
      .setValue(value).build()); 
} 

EDIT 2

ok hier ist die Verwendung von sendCommerceData :

sendCommerceData(new HitBuilders.ItemBuilder() 
             .setTransactionId(Integer.toString(order.orderId)) 
             .setName(orderItem.tradeTitle) 
             .setSku(orderItem.tradeId) 
             .setCategory(orderItem.categoryFullname) 
             .setPrice(price) 
             .setQuantity(orderItem.quantity) 
             .build()); 

u_u

+0

Wie werden Sie die Erstellung der Tracker/Senden Hits nach GA? –

+0

@zzenthed meine bearbeitete Frage für die Art, wie ich die Hits sende. Ich bin nicht unglaublich glücklich mit dem Code, aber es sollte funktionieren ... –

+0

'sendCommerceData' sieht verdächtig aus. Sind Sie sicher, dass Sie die 'Map' korrekt erstellen, um einen gültigen Treffer zu senden? Gibt es eine Chance, dass du außergewöhnlich lange "Strings" in dieser benutzerdefinierten "Map" speicherst? –

Antwort

0

Meine Vermutung ist, dass Sie ProGuard auf Ihre Anwendung laufen, aber noch nicht die folgenden Ausnahmen zu Ihrem proguard-rules.txt hinzugefügt:

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 
+2

Leider habe ich diese Ausnahmen in der proguard-project.txt –