我们的应用程序从我们的崩溃报告软件中获得了相当多不同的SecurityException
报告。以下是崩溃的堆栈跟踪:
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
跟踪器
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中,我有以下代码:
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的用法:
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
发布于 2021-08-04 09:04:21
It's a SecurityException表示这不是因为我们自己的函数而发生的。(主要是系统代码抛出这些异常)。
并且系统使用(android.app.ApplicationThread)来注册广播。
除非在所有设备上都发生这种情况,否则我可以说这是因为GMS配置不好(Google play服务)。
你能做的就是用try catch包装所有的分析调用(你只能捕获安全异常)。
我不是100%确定,但我会添加更多的信息后,我自己尝试它。
发布于 2014-11-01 14:41:46
我的猜测是,您正在应用程序上运行ProGuard,但没有向proguard-rules.txt添加以下异常:
-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;
}
https://stackoverflow.com/questions/26379516
复制相似问题