首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SecurityException:来自谷歌分析代码的Parcel.readException

SecurityException:来自谷歌分析代码的Parcel.readException
EN

Stack Overflow用户
提问于 2014-10-15 17:53:08
回答 2查看 3.5K关注 0票数 47

我们的应用程序从我们的崩溃报告软件中获得了相当多不同的SecurityException报告。以下是崩溃的堆栈跟踪:

代码语言:javascript
复制
java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@43fda840 (pid=17925) when registering receiver android.content.IIntentReceiver$Stub$Proxy@43fd9458
     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)

堆栈跟踪始终是相同的,唯一不同的是android.app.ApplicationThreadProxy@41da9030 (pid=9103)android.content.IIntentReceiver$Stub$Proxy@41ee0688的编号不同(这个线程id是什么?)

现在,此异常似乎与意图大小有关(请参阅以下链接)

这是唯一的原因吗?如果是这样的话,当我的代码似乎只来自google analytics代码时,它是如何导致这种情况的?我使用GA是错误的吗?除了做一个追踪器,我似乎没做什么。

编辑

这就是我如何创建我的跟踪器。我的应用程序对象中有一个singleton跟踪器

代码语言:javascript
复制
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;
}

然后,在我的BaseActivity中,我有以下代码:

代码语言:javascript
复制
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());
}

编辑2个

下面是sendCommerceData的用法:

代码语言:javascript
复制
 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

EN

回答 2

Stack Overflow用户

发布于 2021-08-04 09:04:21

It's a SecurityException表示这不是因为我们自己的函数而发生的。(主要是系统代码抛出这些异常)。

并且系统使用(android.app.ApplicationThread)来注册广播。

除非在所有设备上都发生这种情况,否则我可以说这是因为GMS配置不好(Google play服务)。

你能做的就是用try catch包装所有的分析调用(你只能捕获安全异常)。

我不是100%确定,但我会添加更多的信息后,我自己尝试它。

票数 1
EN

Stack Overflow用户

发布于 2014-11-01 14:41:46

我的猜测是,您正在应用程序上运行ProGuard,但没有向proguard-rules.txt添加以下异常:

代码语言:javascript
复制
-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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26379516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档