同程有借 v1.0.0版本的 MD5 值为:e33397cdbab33543d0c134ec96d77fb8
以下内容为反编译后的 a.java 源代码,内容仅作参考
package com.bonree.sdk.al;
import android.os.Looper;
import android.text.TextUtils;
import com.bonree.sdk.agent.Agent;
import com.bonree.sdk.agent.business.entity.BaseEventInfo;
import com.bonree.sdk.agent.business.entity.CrashEventInfoBean;
import com.bonree.sdk.agent.business.entity.EventBean;
import com.bonree.sdk.agent.business.entity.ThreadDumpInfoBean;
import com.bonree.sdk.agent.engine.crash.NativeCrashEngine;
import com.bonree.sdk.agent.engine.crash.c;
import com.bonree.sdk.aj.c;
import com.bonree.sdk.b.a;
import com.bonree.sdk.bi.i;
import com.bonree.sdk.bz.af;
import com.bonree.sdk.e.d;
import com.huawei.agconnect.exception.AGCServerException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReadWriteLock;
public final class a extends com.bonree.sdk.aj.b implements com.bonree.sdk.agent.engine.crash.b, c {
private static final String f3561h = "CrashService";
private static final byte f3562i = 0;
private static final byte f3563j = 1;
private static final byte f3564k = 2;
private static final int f3565l = 200;
private static final int f3566m = 1000;
private static final int f3567n = 1;
private static final int f3568o = 2;
private static final int f3569p = 3;
private static final int f3570q = 4;
private volatile EventBean A;
public volatile boolean f3571g;
private final String f3572r;
private byte f3573s;
private final AtomicBoolean f3574t;
private final AtomicBoolean f3575u;
private final AtomicBoolean f3576v;
private final AtomicLong f3577w;
private com.bonree.sdk.aq.a f3578x;
private com.bonree.sdk.ap.a f3579y;
private ReadWriteLock f3580z;
public interface InterfaceC0051a {
void a();
}
public a(d dVar) {
super(dVar);
this.f3572r = "Crash";
this.A = new EventBean();
this.f3574t = new AtomicBoolean(true);
this.f3575u = new AtomicBoolean(true);
this.f3576v = new AtomicBoolean(true);
this.f3577w = new AtomicLong(86400000L);
this.f3573s = (byte) 0;
this.f3546f = Collections.synchronizedList(new ArrayList());
}
private void b(boolean z8) {
this.f3575u.getAndSet(z8);
}
private static String c(String str) {
return str == null ? "" : str;
}
private EventBean d(int i9) {
Integer num;
if (this.A == null) {
return null;
}
synchronized (this) {
if (this.A == null) {
return null;
}
if (this.A.mEventTime < 0) {
this.A.correctEventTime(d(this.A.mEventTime));
}
if (this.A.mEventInfo == null || !(this.A.mEventInfo instanceof CrashEventInfoBean) || (num = ((CrashEventInfoBean) this.A.mEventInfo).crashPlatform) == null || num.intValue() != i9) {
return null;
}
EventBean eventBean = this.A;
this.A = null;
return eventBean;
}
}
private synchronized String l() {
return NativeCrashEngine.getBrCrashVersion();
}
private CrashEventInfoBean m() {
CrashEventInfoBean crashEventInfoBean = new CrashEventInfoBean();
if (this.f3574t.get()) {
this.f4023c.c("try to get logcat...", new Object[0]);
String a9 = af.a((int) AGCServerException.AUTHENTICATION_INVALID);
crashEventInfoBean.systemLog = a9;
if (af.b(a9)) {
crashEventInfoBean.systemLog = null;
}
this.f4023c.c("get logcat end", new Object[0]);
} else {
crashEventInfoBean.systemLog = null;
}
return crashEventInfoBean;
}
private void n() {
if (this.f3578x == null) {
this.f3578x = new com.bonree.sdk.aq.a(this.f4022b.c().getFilesDir().getAbsolutePath(), this.f4022b.h());
}
}
private synchronized boolean o() {
return this.f3573s == 2;
}
private synchronized boolean p() {
return this.f3573s == 1;
}
private synchronized boolean q() {
return this.f3573s == 0;
}
public final CrashEventInfoBean a(CrashEventInfoBean crashEventInfoBean) {
if (crashEventInfoBean != null) {
try {
if (!af.b(crashEventInfoBean.nativeCrashLogPath)) {
n();
return this.f3578x.a(crashEventInfoBean);
}
} catch (Throwable th) {
this.f4023c.a("CrashService updateCrashEvent error %s", th);
return crashEventInfoBean;
}
}
this.f4023c.c("CrashServiceupdateCrashEventBean null", new Object[0]);
return null;
}
public final void c(int i9) {
if (i9 < 0) {
i9 = 0;
}
this.f3577w.getAndSet(i9 * 60 * 60 * 1000);
}
public final EventBean f() {
return d(2);
}
public final EventBean g() {
return d(1);
}
public final synchronized List<EventBean> h() {
e();
List<EventBean> list = this.f3546f;
if (list == null || list.size() <= 0) {
return null;
}
ArrayList arrayList = new ArrayList(this.f3546f);
this.f3546f.clear();
return arrayList;
}
public final synchronized com.bonree.sdk.ap.a i() {
com.bonree.sdk.ap.a aVar = this.f3579y;
if (aVar != null) {
return aVar;
}
com.bonree.sdk.e.b bVar = this.f4022b;
if (bVar != null && bVar.c() != null) {
com.bonree.sdk.ap.a a9 = com.bonree.sdk.ap.a.a(this.f4022b.c());
if (a9 != null && a9.f3632a) {
this.f3579y = a9;
return a9;
}
n();
if (this.f3578x.b()) {
this.f4023c.d("native crash has occurs!", new Object[0]);
com.bonree.sdk.ap.a a10 = com.bonree.sdk.ap.a.a(this.f4022b.c());
if (a10 != null && a10.f3632a) {
this.f3579y = a10;
return a10;
}
}
com.bonree.sdk.ap.a aVar2 = new com.bonree.sdk.ap.a(false, null, null, 0L, null);
this.f3579y = aVar2;
return aVar2;
}
this.f4023c.d("check agent context fail when checking self crash state", new Object[0]);
return new com.bonree.sdk.ap.a(false, null, null, 0L, null);
}
public final synchronized void j() {
com.bonree.sdk.e.b bVar = this.f4022b;
if (bVar != null && bVar.c() != null) {
com.bonree.sdk.ap.a aVar = new com.bonree.sdk.ap.a(false, null, null, 0L, null);
this.f3579y = aVar;
aVar.b(this.f4022b.c());
return;
}
this.f4023c.d("check agent context fail when reseting self crash state", new Object[0]);
}
public final boolean k() {
return this.f3571g;
}
private void b(com.bonree.sdk.an.c cVar) {
if (cVar == null || af.b(cVar.f3611a)) {
return;
}
a(cVar.f3612b, cVar.f3613c, (com.bonree.sdk.ao.a) null, cVar.f3611a);
try {
Thread.sleep(1000L);
} catch (InterruptedException unused) {
}
}
private void b(com.bonree.sdk.an.b bVar) {
if (bVar == null || bVar.f3609b == null) {
return;
}
com.bonree.sdk.ao.a a9 = new com.bonree.sdk.ao.b(this.f3576v.get()).a(bVar.f3609b);
this.f4023c.a("parse crash result:%s", a9);
a(bVar.f3608a.getId(), bVar.f3608a.getName(), a9, (String) null);
}
private void a(boolean z8) {
this.f3576v.getAndSet(z8);
n();
this.f3578x.a(z8);
}
@Override
public final void a(com.bonree.sdk.an.c cVar) {
this.f4023c.d("native crash callback! data: %s ", cVar);
if (o()) {
this.f4023c.d("native crash callback will be returned! isStop:true", new Object[0]);
} else if (cVar == null || af.b(cVar.f3611a)) {
} else {
a(cVar.f3612b, cVar.f3613c, (com.bonree.sdk.ao.a) null, cVar.f3611a);
try {
Thread.sleep(1000L);
} catch (InterruptedException unused) {
}
}
}
public final void b(String str) {
if (p()) {
for (EventBean eventBean : i.a(str, "crash")) {
if (200 <= this.f3546f.size()) {
this.f4023c.c("CrashService size:%d >limit:%d", Integer.valueOf(this.f3546f.size()), 200);
EventBean eventBean2 = this.f3546f.get(0);
if (eventBean2 != null) {
BaseEventInfo baseEventInfo = eventBean2.mEventInfo;
if ((baseEventInfo instanceof CrashEventInfoBean) && ((CrashEventInfoBean) baseEventInfo).iscustom) {
this.f3546f.remove(0);
}
}
this.f3546f.remove(1);
}
eventBean.mEventTime = -eventBean.mEventTime;
eventBean.mStateIndex = eventBean.getStateIndex();
CrashEventInfoBean crashEventInfoBean = (CrashEventInfoBean) eventBean.mEventInfo;
crashEventInfoBean.crashThreadId = String.valueOf(Thread.currentThread().getId());
crashEventInfoBean.setAppStateBackground(com.bonree.sdk.e.a.F().R());
crashEventInfoBean.appLaunchTime = com.bonree.sdk.e.a.B();
eventBean.mEventInfo = crashEventInfoBean;
eventBean.uploadStateKey();
eventBean.mTraceInfoList = com.bonree.sdk.be.c.h().f();
a(eventBean);
this.f4023c.c("eventBean=crash : %s", eventBean);
com.bonree.sdk.aj.c.b(c.b.CRASH, eventBean);
}
}
}
private void a(long j9, String str, com.bonree.sdk.ao.a aVar, String str2) {
CrashEventInfoBean crashEventInfoBean;
if (j9 < 0 || af.b(str)) {
return;
}
synchronized (this) {
if (this.A == null) {
this.A = new EventBean();
}
this.A.mEventType = "crash";
this.A.mStateIndex = this.A.getStateIndex();
if (aVar != null) {
crashEventInfoBean = m();
crashEventInfoBean.crashPlatform = 2;
} else {
crashEventInfoBean = new CrashEventInfoBean();
crashEventInfoBean.crashPlatform = 1;
}
CrashEventInfoBean crashEventInfoBean2 = crashEventInfoBean;
this.A.mEventTime = d();
crashEventInfoBean2.appLaunchTime = com.bonree.sdk.e.a.B();
crashEventInfoBean2.setAppStateBackground(com.bonree.sdk.e.a.F().R());
this.A.mEventInfo = crashEventInfoBean2;
if (aVar != null && aVar.f3620f) {
a(com.bonree.sdk.c.a.c(this.A.mEventTime), aVar.f3617c);
this.f3571g = aVar.f3620f;
}
crashEventInfoBean2.mainThreadId = String.valueOf(Looper.getMainLooper().getThread().getId());
crashEventInfoBean2.threadDumpInfo = new ArrayList();
Map<Thread, StackTraceElement[]> a9 = com.bonree.sdk.at.a.a(j9);
Thread thread = Looper.getMainLooper().getThread();
if (a9.isEmpty() && !a9.containsKey(thread)) {
a9.put(thread, thread.getStackTrace());
}
crashEventInfoBean2.crashThreadId = a(aVar, crashEventInfoBean2, j9, str, str2, a9);
crashEventInfoBean2.threadDumpInfo.addAll(com.bonree.sdk.at.a.b(a9, str));
if (aVar != null) {
crashEventInfoBean2.causedBy = aVar.f3617c;
crashEventInfoBean2.type = aVar.f3615a;
}
this.A.uploadStateKey();
this.A.mTraceInfoList = com.bonree.sdk.be.c.h().f();
if (crashEventInfoBean2.crashPlatform.intValue() == 1) {
com.bonree.sdk.be.c.h().g();
}
com.bonree.sdk.aj.c.b(c.b.CRASH, this.A);
this.f4023c.c("CrashService deal crash event finish!!!!", new Object[0]);
}
}
public final void b(long j9, String str, String str2, String str3) {
a(j9, str, str2, str3, 4);
}
@Override
public final synchronized boolean b() {
if (!q() && !o()) {
a("Crash", a.EnumC0053a.f4029d);
this.f3573s = (byte) 2;
com.bonree.sdk.agent.engine.crash.d.a().unRegisterService(this);
NativeCrashEngine.getInstance().unRegisterService(this);
this.f3546f.clear();
this.f3578x.d();
a("Crash", a.EnumC0053a.f4030e);
return true;
}
this.f4023c.d("CrashService no need stoped! isInit:%b, isStop:%b", Boolean.valueOf(q()), Boolean.valueOf(o()));
return false;
}
private static String a(com.bonree.sdk.ao.a aVar, CrashEventInfoBean crashEventInfoBean, long j9, String str, String str2, Map<Thread, StackTraceElement[]> map) {
ThreadDumpInfoBean threadDumpInfoBean = new ThreadDumpInfoBean();
ThreadDumpInfoBean threadDumpInfoBean2 = null;
if (aVar != null) {
if (!af.b(aVar.f3616b)) {
threadDumpInfoBean.mDumpInfo = c(aVar.f3616b);
}
crashEventInfoBean.nativeCrashLogPath = null;
} else {
crashEventInfoBean.nativeCrashLogPath = str2;
ThreadDumpInfoBean a9 = com.bonree.sdk.at.a.a(map, str);
if (a9 == null && "main".equals(str)) {
a9 = com.bonree.sdk.at.a.a(map, true);
}
threadDumpInfoBean2 = a9;
if (threadDumpInfoBean2 != null && !af.b(threadDumpInfoBean2.mDumpInfo)) {
threadDumpInfoBean.mDumpInfo = threadDumpInfoBean2.mDumpInfo;
}
}
if ("main".equals(str)) {
threadDumpInfoBean.mThreadId = String.valueOf(Looper.getMainLooper().getThread().getId());
} else if (aVar == null && threadDumpInfoBean2 != null && !af.b(String.valueOf(threadDumpInfoBean2.mThreadId))) {
threadDumpInfoBean.mThreadId = threadDumpInfoBean2.mThreadId;
} else {
threadDumpInfoBean.mThreadId = String.valueOf(j9);
}
threadDumpInfoBean.mThreadName = str;
List<ThreadDumpInfoBean> list = crashEventInfoBean.threadDumpInfo;
if (list != null) {
list.add(threadDumpInfoBean);
}
return String.valueOf(threadDumpInfoBean.mThreadId);
}
private void a(long j9, String str) {
com.bonree.sdk.e.b bVar = this.f4022b;
if (bVar != null && bVar.c() != null) {
String agentVersion = Agent.getAgentVersion();
String b9 = this.f4022b.b();
if (!af.b(str)) {
this.f4023c.c("self java crash time:%s,crash causeby:%s", Long.valueOf(j9), str);
}
new com.bonree.sdk.ap.a(true, agentVersion, b9, j9, str).b(this.f4022b.c());
return;
}
this.f4023c.d("check agent context fail while handling self crash occurs", new Object[0]);
}
@Override
public final void a(com.bonree.sdk.an.b bVar) {
this.f4023c.d("java crash callback! data:%s", bVar);
if (o()) {
this.f4023c.d("java crash callback will be returned! isStop:true", new Object[0]);
} else if (bVar == null || bVar.f3609b == null) {
} else {
com.bonree.sdk.ao.a a9 = new com.bonree.sdk.ao.b(this.f3576v.get()).a(bVar.f3609b);
this.f4023c.a("parse crash result:%s", a9);
a(bVar.f3608a.getId(), bVar.f3608a.getName(), a9, (String) null);
}
}
public final void a(String str, String str2, String str3) {
if (!p() || TextUtils.isEmpty(str)) {
return;
}
if (200 <= this.f3546f.size()) {
this.f4023c.c("CrashService size:%d >limit:%d", Integer.valueOf(this.f3546f.size()), 200);
EventBean eventBean = this.f3546f.get(0);
if (eventBean != null) {
BaseEventInfo baseEventInfo = eventBean.mEventInfo;
if ((baseEventInfo instanceof CrashEventInfoBean) && ((CrashEventInfoBean) baseEventInfo).iscustom) {
this.f3546f.remove(0);
}
}
this.f3546f.remove(1);
}
EventBean eventBean2 = new EventBean();
eventBean2.mEventTime = d();
eventBean2.mEventType = "crash";
eventBean2.mStateIndex = eventBean2.getStateIndex();
CrashEventInfoBean crashEventInfoBean = new CrashEventInfoBean();
crashEventInfoBean.type = str;
crashEventInfoBean.causedBy = str2;
crashEventInfoBean.param = str3;
crashEventInfoBean.iscustom = true;
crashEventInfoBean.crashThreadId = String.valueOf(Thread.currentThread().getId());
crashEventInfoBean.setAppStateBackground(com.bonree.sdk.e.a.F().R());
crashEventInfoBean.appLaunchTime = com.bonree.sdk.e.a.B();
eventBean2.mEventInfo = crashEventInfoBean;
eventBean2.uploadStateKey();
eventBean2.mTraceInfoList = com.bonree.sdk.be.c.h().f();
this.f3546f.add(eventBean2);
com.bonree.sdk.aj.c.b(c.b.CRASH, eventBean2);
}
public final void a(long j9, String str, String str2, String str3) {
a(j9, str, str2, str3, 3);
}
private void a(long j9, String str, String str2, String str3, int i9) {
try {
if (p() && !TextUtils.isEmpty(str)) {
EventBean eventBean = new EventBean();
eventBean.mEventTime = (-j9) * 1000;
eventBean.mEventType = "crash";
eventBean.mStateIndex = eventBean.getStateIndex();
CrashEventInfoBean crashEventInfoBean = new CrashEventInfoBean();
crashEventInfoBean.type = str;
crashEventInfoBean.causedBy = str2;
if (!TextUtils.isEmpty(str3)) {
crashEventInfoBean.threadDumpInfo = new ArrayList();
ThreadDumpInfoBean threadDumpInfoBean = new ThreadDumpInfoBean();
if (!TextUtils.isEmpty(str2)) {
str3 = str2 + "\r\n" + str3;
}
if (str3.length() > 10000) {
str3 = str3.substring(0, 10000);
}
threadDumpInfoBean.mDumpInfo = str3;
threadDumpInfoBean.mThreadId = String.valueOf(Thread.currentThread().getId());
threadDumpInfoBean.mThreadName = Thread.currentThread().getName();
crashEventInfoBean.threadDumpInfo.add(threadDumpInfoBean);
}
crashEventInfoBean.crashThreadId = String.valueOf(Thread.currentThread().getId());
crashEventInfoBean.mainThreadId = String.valueOf(Looper.getMainLooper().getThread().getId());
crashEventInfoBean.crashPlatform = Integer.valueOf(i9);
crashEventInfoBean.iscustom = false;
crashEventInfoBean.setAppStateBackground(com.bonree.sdk.e.a.F().R());
crashEventInfoBean.appLaunchTime = com.bonree.sdk.e.a.B();
eventBean.mEventInfo = crashEventInfoBean;
if (200 <= this.f3546f.size()) {
this.f4023c.c("CrashService size:%d >limit:%d", Integer.valueOf(this.f3546f.size()), 200);
EventBean eventBean2 = this.f3546f.get(0);
if (eventBean2 != null) {
BaseEventInfo baseEventInfo = eventBean2.mEventInfo;
if ((baseEventInfo instanceof CrashEventInfoBean) && ((CrashEventInfoBean) baseEventInfo).iscustom) {
this.f3546f.remove(0);
}
}
this.f3546f.remove(1);
}
eventBean.uploadStateKey();
eventBean.mTraceInfoList = com.bonree.sdk.be.c.h().f();
a(eventBean);
com.bonree.sdk.aj.c.b(c.b.CRASH, eventBean);
}
} catch (Throwable th) {
this.f4023c.e("CrashService addOtherCrash error:" + th.toString(), new Object[0]);
}
}
@Override
public final synchronized boolean a() {
if (p()) {
a("Crash", a.EnumC0053a.f4027b);
return false;
}
a("Crash", a.EnumC0053a.f4026a);
this.f3573s = (byte) 1;
n();
com.bonree.sdk.agent.engine.crash.d.a().registerService(this);
NativeCrashEngine.getInstance().initEngine(false, this.f3578x.a());
NativeCrashEngine.getInstance().registerService((com.bonree.sdk.agent.engine.crash.c) this);
this.f3578x.c();
a("Crash", a.EnumC0053a.f4028c);
return true;
}
}