t-spoon / traceur Goto Github PK
View Code? Open in Web Editor NEWEasier RxJava2 debugging with better stacktraces
Easier RxJava2 debugging with better stacktraces
Hi,
I have encountered a bug when you use Observable.retry()
with a Traceur logging on. There is a java.lang.IllegalArgumentException: Self-causation not permitted
in such case.
I have created a gist that showcases the issue, it's available here.
Best regards,
Mateusz
Traceur produces a NoSuchFieldError exception on retry(). I'm using RxJava 2.2.1 I haven't tried older versions. Here's the code to reproduce the issue:
Traceur.enableLogging();
Single.defer(() -> {
return Single.error(new RuntimeException());
}).retry(3).blockingGet();
From RxJava 2.2.1 this lib is not compatible any more.
The issue is in renamed fields in RxJava2
BasicFuseableObserver.qs
(was renamed to BasicFuseableObserver.qd
)
and
BasicFuseableObserver.actual
(was renamed to BasicFuseableObserver.downstream
).
Hello guys! I'm facing with one problem using Traceur. When I call Traceur.enableLogging();
then Crashlytics don`t send reports!
Any suggestions how I can workaround it?
So your code in TraceurException
is
public Throwable appendTo(Throwable throwable) {
Throwable t = throwable;
while (t.getCause() != null) {
t = t.getCause();
// Won't be able to init the cause of this with self
if (t == this) {
return throwable;
}
if (logLevel == LogLevel.SHOW_ONLY_FIRST && t instanceof TraceurException) {
return throwable;
}
}
t.initCause(this);
return throwable;
}
but the code inside Throwable
is
public synchronized Throwable initCause(Throwable cause) {
if (this.cause != this)
throw new IllegalStateException("Can't overwrite cause with " +
Objects.toString(cause, "a null"), this);
if (cause == this)
throw new IllegalArgumentException("Self-causation not permitted", this);
this.cause = cause;
return this;
}
This means the appendTo
function will cause an exception to be thrown if a Throwable's cause is ever found to be null.
Possible solution
while (t.getCause() != null)
should be while (t.getCause() != null && t.getCause() != t)
and wrap the
t.initCause(this);with a check against
t.getCause()`'s nullability
I'll make a PR later with this
Hi,
Recently I have encountered a problem using Traceur on Android.
In my project I sometimes got OOM errors when trying to log too complex CompositeException
s from external components using Android Log.e
method. To avoid it I strip these exceptions to have 5 original exceptions max using stripCompositeException
method included in the gist I linked at the end of this issue.
In the regular setup this approach works correctly, but using Traceur, on less performant devices and older apis that have older memory management alghoritms (in my case API 17) I got uncaught StackOverflowError
that crashes my app. I include the error I'm encountering in the attached test case:
07-01 12:42:09.746 2489-2489/pl.videostar E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.StackOverflowError
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:71)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:73)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:73)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:73)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:73)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onSubscribe(ObservableDoOnEach.java:73)
at io.reactivex.internal.observers.BasicFuseableObserver.onSubscribe(BasicFuseableObserver.java:66)
at io.reactivex.internal.operators.observable.ObservableJust.subscribeActual(ObservableJust.java:34)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssemblyScalarCallable.subscribeActual(ObservableOnAssemblyScalarCallable.java:40)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at com.tspoon.traceur.ObservableOnAssembly.subscribeActual(ObservableOnAssembly.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10842)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.su
Although, on API 25 Traceur won't crash the app and will log the excepton correctly, but still, in such case the printed stacktrace is so huge that it fills up whole Android Logcat console and eventually breaks it withread: unexpected EOF!
what also makes logging useless.
Is it possible to create some constraints in Traceur that would prevent such issues?
I have created the test case here. Let me know if you wouldn't be able to reproduce the issue.
Just want to say Thank you for you lib. Helped me to hunt down a very hard to find bug.
Hi, I am trying to use Traceur in my project, it work fine until it cause an crash. It crash on Subscriber.onError(), so Rxjava cannot handle it anymore.
After disabling Traceur, it just logout the error and doesn't crash.
It happened when I used Charles to capture some https request without import certificate.
there is the crash log:
08-23 14:59:31.629 W/System.err(18773): ComposedException 1 : 08-23 14:59:31.629 W/System.err(18773): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 08-23 14:59:31.629 W/System.err(18773): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:333) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:281) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:251) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:151) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 08-23 14:59:31.629 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.630 D/libc-netbsd(18773): [getaddrinfo]: mtk hostname=abc.xxx.com; servname=(null); netid=0; mark=0 08-23 14:59:31.630 W/System.err(18773): at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:211) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 D/libc-netbsd(18773): getaddrinfo( app_uid:10117 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.630 W/System.err(18773): at com.xxxx.data.net.intercept.CacheInterceptor.intercept(CacheInterceptor.java:27) 08-23 14:59:31.630 D/libc-netbsd(18773): getaddrinfo() uid prop: 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.630 D/libc-netbsd(18773): getaddrinfo() getuid():10117 08-23 14:59:31.630 W/System.err(18773): at com.xxx.okhttp.GslbHttpClient.performRequest(GslbHttpClient.java:34) 08-23 14:59:31.630 D/libc-netbsd(18773): [getaddrinfo]: mtk ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0 08-23 14:59:31.630 W/System.err(18773): at com.xxx.HttpClientProxy.performRequest(HttpClientProxy.java:86) 08-23 14:59:31.630 W/System.err(18773): at com.xxx.okhttp.GslbInterceptor.intercept(GslbInterceptor.java:36) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) 08-23 14:59:31.630 W/System.err(18773): at okhttp3.RealCall.execute(RealCall.java:69) 08-23 14:59:31.630 W/System.err(18773): at retrofit2.OkHttpCall.execute(OkHttpCall.java:180) 08-23 14:59:31.630 W/System.err(18773): at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41) 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 NativeCrypto_SSL_do_handshake fd=0xdb08efc0 shc=0xdb08efc4 timeout_millis=30000 client_mode=1 npn=0x0 08-23 14:59:31.630 W/System.err(18773): at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.630 D/NativeCrypto(18773): doing handshake ++ 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback where=0x10 ret=1 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 handshake start in CINIT before connect initialization 08-23 14:59:31.630 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 08-23 14:59:31.630 W/System.err(18773): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 08-23 14:59:31.630 W/System.err(18773): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback calling handshakeCompleted 08-23 14:59:31.630 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 08-23 14:59:31.630 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback completed 08-23 14:59:31.630 W/System.err(18773): at java.lang.Thread.run(Thread.java:818) 08-23 14:59:31.630 W/System.err(18773): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback where=0x1001 ret=1 08-23 14:59:31.630 W/System.err(18773): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:324) 08-23 14:59:31.630 D/NativeCrypto(18773): ssl=0xd90e9800 SSL_connect:CINIT before connect initialization 08-23 14:59:31.630 W/System.err(18773): at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:225) 08-23 14:59:31.631 W/System.err(18773): at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:115) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback ignored 08-23 14:59:31.631 W/System.err(18773): at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:571) 08-23 14:59:31.631 W/System.err(18773): at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 08-23 14:59:31.631 W/System.err(18773): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:329) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:281) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:251) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:151) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback where=0x1001 ret=1 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 SSL_connect:3WCH_A SSLv3 write client hello A 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback ignored 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback where=0x1002 ret=-1 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 SSL_connect:error exit in 3RSH_A SSLv3 read server hello A 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 info_callback ignored 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:211) 08-23 14:59:31.631 D/NativeCrypto(18773): doing handshake -- ret=-1 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at com.xxxx.data.net.intercept.CacheInterceptor.intercept(CacheInterceptor.java:27) 08-23 14:59:31.631 D/NativeCrypto(18773): ssl=0xd90e9800 NativeCrypto_SSL_do_handshake ret=-1 errno=11 sslError=2 timeout_millis=30000 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at com.xxx.okhttp.GslbHttpClient.performRequest(GslbHttpClient.java:34) 08-23 14:59:31.631 W/System.err(18773): at com.xxx.HttpClientProxy.performRequest(HttpClientProxy.java:86) 08-23 14:59:31.631 W/System.err(18773): at com.xxx.okhttp.GslbInterceptor.intercept(GslbInterceptor.java:36) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) 08-23 14:59:31.631 W/System.err(18773): at okhttp3.RealCall.execute(RealCall.java:69) 08-23 14:59:31.631 W/System.err(18773): at retrofit2.OkHttpCall.execute(OkHttpCall.java:180) 08-23 14:59:31.631 W/System.err(18773): at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41) 08-23 14:59:31.631 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.631 W/System.err(18773): at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) 08-23 14:59:31.632 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.632 W/System.err(18773): at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) 08-23 14:59:31.632 W/System.err(18773): at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) 08-23 14:59:31.632 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) 08-23 14:59:31.632 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 08-23 14:59:31.632 W/System.err(18773): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 08-23 14:59:31.632 W/System.err(18773): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 08-23 14:59:31.632 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 08-23 14:59:31.632 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 08-23 14:59:31.632 W/System.err(18773): at java.lang.Thread.run(Thread.java:818) 08-23 14:59:31.632 W/System.err(18773): Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:324) 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:225) 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:115) 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:571) 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 08-23 14:59:31.632 W/System.err(18773): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:329) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:281) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:251) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:151) 08-23 14:59:31.632 D/ConnectivityService( 1155): getActiveNetworkInfo networkInfo = [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "xx-xxx-2.4G", roaming: false, failover: false, isAvailable: true] 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:211) 08-23 14:59:31.632 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.633 W/System.err(18773): at com.xxxx.data.net.intercept.CacheInterceptor.intercept(CacheInterceptor.java:27) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.633 W/System.err(18773): at com.xxx.okhttp.GslbHttpClient.performRequest(GslbHttpClient.java:34) 08-23 14:59:31.633 W/System.err(18773): at com.xxx.HttpClientProxy.performRequest(HttpClientProxy.java:86) 08-23 14:59:31.633 W/System.err(18773): at com.xxx.okhttp.GslbInterceptor.intercept(GslbInterceptor.java:36) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) 08-23 14:59:31.633 W/System.err(18773): at okhttp3.RealCall.execute(RealCall.java:69) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.OkHttpCall.execute(OkHttpCall.java:180) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 08-23 14:59:31.633 W/System.err(18773): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 08-23 14:59:31.633 W/System.err(18773): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 08-23 14:59:31.633 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 08-23 14:59:31.633 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 08-23 14:59:31.633 W/System.err(18773): at java.lang.Thread.run(Thread.java:818) 08-23 14:59:31.633 W/System.err(18773): ComposedException 2 : 08-23 14:59:31.633 W/System.err(18773): java.lang.IllegalStateException: Cause already initialized 08-23 14:59:31.633 W/System.err(18773): at com.tspoon.traceur.ObservableOnAssembly$OnAssemblyObserver.onError(ObservableOnAssembly.java:62) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onError(BodyObservable.java:72) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:55) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.633 W/System.err(18773): at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.Observable.subscribe(Observable.java:10901) 08-23 14:59:31.633 W/System.err(18773): at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) 08-23 14:59:31.634 W/System.err(18773): at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) 08-23 14:59:31.634 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) 08-23 14:59:31.634 W/System.err(18773): at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) 08-23 14:59:31.634 W/System.err(18773): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 08-23 14:59:31.634 W/System.err(18773): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) 08-23 14:59:31.634 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 08-23 14:59:31.634 W/System.err(18773): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 08-23 14:59:31.634 W/System.err(18773): at java.lang.Thread.run(Thread.java:818)
Hello,
I just added this lib into my project, https://github.com/athkalia/Just-Another-Android-App
It contains an implementation that only imports the library for non-release builds (by creating an extra interface for the tool). Feel free to link to the project as an example.
Cheers,
Sakis
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.