GithubHelp home page GithubHelp logo

kyson / androidgodeye Goto Github PK

View Code? Open in Web Editor NEW
2.6K 80.0 341.0 129.35 MB

An app performance monitor(APM) , like "Android Studio profiler", you can easily monitor the performance of your app real time in browser

License: Apache License 2.0

Java 70.58% JavaScript 28.67% CSS 0.04% HTML 0.22% Shell 0.19% Python 0.20% Batchfile 0.10%
debugging-tool performance-monitoring performance-visualization profile profiler android-performance android-god-eye performance-visualization-dashboard godeye performance-monitor

androidgodeye's Introduction

https://github-readme-stats.vercel.app/api?username=Kyson

androidgodeye's People

Contributors

ahhbzyz avatar codacy-badger avatar imgbotapp avatar kyson avatar pdog18 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidgodeye's Issues

THREAD的数据消费时会crash

  GodEye.instance().observeModule(GodEye.ModuleName.THREAD, new Consumer<ThreadInfo>() {
        @Override
        public void accept(ThreadInfo threadInfo) throws Exception {
            mConsumer.accept(GodEye.ModuleName.THREAD, threadInfo);
        }
    });

03-20 04:23:17.341 16128 16148 E AndroidRuntime: io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.util.ArrayList cannot be cast to cn.hikyson.methodcanary.lib.ThreadInfo
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:67)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:201)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at java.lang.Thread.run(Thread.java:761)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to cn.hikyson.methodcanary.lib.ThreadInfo
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at com.douban.frodo.eye.Eye$18.accept(Eye.java:187)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:63)
03-20 04:23:17.341 16128 16148 E AndroidRuntime: ... 9 more

io.reactivex.exceptions.OnErrorNotImplementedException: Attempt to invoke virtual method 'java.lang.String java.lang.ThreadGroup.getName()' on a null object reference

io.reactivex.exceptions.OnErrorNotImplementedException: Attempt to invoke virtual method 'java.lang.String java.lang.ThreadGroup.getName()' on a null object reference
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63)
at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
at io.reactivex.internal.observers.BasicFuseableObserver.fail(BasicFuseableObserver.java:110)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:61)
at io.reactivex.observers.SerializedObserver.onNext(SerializedObserver.java:113)
at io.reactivex.internal.operators.observable.ObservableSampleTimed$SampleTimedObserver.emit(ObservableSampleTimed.java:116)
at io.reactivex.internal.operators.observable.ObservableSampleTimed$SampleTimedNoLast.run(ObservableSampleTimed.java:138)
at io.reactivex.internal.schedulers.ScheduledDirectPeriodicTask.run(ScheduledDirectPeriodicTask.java:39)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:278)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:270)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.ThreadGroup.getName()' on a null object reference
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadlockDefaultThreadFilter.filter(DeadlockDefaultThreadFilter.java:11)
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadLock$2.apply(DeadLock.java:48)
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadLock$2.apply(DeadLock.java:43)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
... 10 more
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.ThreadGroup.getName()' on a null object reference
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadlockDefaultThreadFilter.filter(DeadlockDefaultThreadFilter.java:11)
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadLock$2.apply(DeadLock.java:48)
at cn.hikyson.godeye.core.internal.modules.thread.deadlock.DeadLock$2.apply(DeadLock.java:43)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
at io.reactivex.observers.SerializedObserver.onNext(SerializedObserver.java:113)
at io.reactivex.internal.operators.observable.ObservableSampleTimed$SampleTimedObserver.emit(ObservableSampleTimed.java:116)
at io.reactivex.internal.operators.observable.ObservableSampleTimed$SampleTimedNoLast.run(ObservableSampleTimed.java:138)
at io.reactivex.internal.schedulers.ScheduledDirectPeriodicTask.run(ScheduledDirectPeriodicTask.java:39)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:278)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:270)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)

关于线程死锁检测

看到腾讯Bugly分享的一篇文章关于如何检测死锁的方案,这么看来项目中检测死锁的方案就非常局限了,检测死锁这个对于工程量较大的项目而言还是很有必要的一项性能检测。

文章地址

Add needed permissions to the readme

Add the required permissions to the readme as people might not have them for release but need them in the manifest for debug.

An example: java.lang.IllegalStateException: install leak need permission:android.permission.WRITE_EXTERNAL_STORAGE

无法获取以太网地址

你好
我使用的是android板子通过以太网连接,我看源码中您是通过wifi获取的ip地址。
所以我没有使用wifi则无法获取ip地址

Open AndroidGodEye dashboard [ http://0.0.0.0:5390/index.html ] in your browser , if can not open it , make sure device and pc are on the same network segment

能否增加下相关功能

我的android设备是机顶盒,没电池,直接插电源的

java.lang.NullPointerException: Attempt to invoke virtual method 'io.reactivex.Observable cn.hikyson.godeye.core.internal.ProduceableSubject.subject()' on a null object reference
at cn.hikyson.godeye.monitor.driver.Watcher.observeAll(Watcher.java:69)
at cn.hikyson.godeye.monitor.GodEyeMonitor.work(GodEyeMonitor.java:82)
at cn.hikyson.godeye.monitor.GodEyeMonitor.work(GodEyeMonitor.java:43)

C/S 之间通讯最好使用 WebSocket 协议

目前因为 Client 端使用 Http 轮询的方式,导致 Server 端被设计为所谓的「生产者 / 消费者」模式,这其实是一个设计错误,会导致很多问题:

  • 无法主动 Push 数据给 Client,导致只能在 Server 用 Stack 来存数据,Client 主动 Pull
  • 无状态。没有对不同的 Client 做区分,导致有多个 Client 的情况下会竞争数据

建议可以改为使用 WebSocket 协议通讯。WebSocket Server 端可以用 Stetho 的实现,具体可以参考: https://github.com/nekocode/websocket-adb-forward

在三星s8上,Android 7.0,level 24 ROM samsung/dreamltexx CPU架构 arm64-v8a 会造成崩溃

java.lang.RuntimeException:Unable to create application com.saic.cmp.business.CMPApplication: java.lang.IllegalStateException: can not call install leak

2 android.app.ActivityThread.handleBindApplication(ActivityThread.java:5973)
3 ......
4 Caused by:
5 java.lang.IllegalStateException:can not call install leak
6 cn.hikyson.godeye.core.internal.modules.leakdetector.LeakDetector.install(LeakDetector.java:49)
7 cn.hikyson.godeye.core.internal.modules.leakdetector.LeakDetector.install(LeakDetector.java:24)
8 cn.hikyson.godeye.core.GodEye.install(GodEye.java:47)
9 com.saic.cmp.business.CMPApplication.onCreate(CMPApplication.java:150)
10 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1032)
11 android.app.ActivityThread.handleBindApplication(ActivityThread.java:5970)
12 android.app.ActivityThread.-wrap3(ActivityThread.java)
13 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1710)
14 android.os.Handler.dispatchMessage(Handler.java:102)
15 android.os.Looper.loop(Looper.java:154)
16 android.app.ActivityThread.main(ActivityThread.java:6776)
17 java.lang.reflect.Method.invoke(Native Method)
18 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
19 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

java.lang.ArithmeticException: divide by zero

App启动几分钟后 crash, 启动后没进行任何交互

java.lang.ArithmeticException: divide by zero
        at cn.hikyson.godeye.core.internal.modules.fps.FpsEngine$3$1$1.doFrame(FpsEngine.java:78)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:883)
        at android.view.Choreographer.doCallbacks(Choreographer.java:697)
        at android.view.Choreographer.doFrame(Choreographer.java:630)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:871)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6338)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

MethodCanaryTransform This feature requires ASM6

Execution failed for task ':app:transformClassesWithMethodCanaryTransformForDebug'.

This feature requires ASM6

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.

Calling the steps in the application does nothing

So, I have my application class extending Application like this:

class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        StartupTracer.get().onApplicationCreate();
        GodEye.instance().installAll(this, new CrashFileProvider(this));
        GodEyeMonitor.work(this);
    }
}

And looking in the web app shows nothing:

screen shot 2018-01-31 at 18 04 39

Maybe I should initialize things in other places? How should it be?

Also, seeing the stacktrace it shows. Without proguard it seems the issue does not appear. So I guess its heavily tied to it

                                 Caused by: java.lang.IllegalStateException: can not call install leak
                                                     at cn.hikyson.godeye.core.internal.modules.leakdetector.c.a(SourceFile:44)
                                                     at cn.hikyson.godeye.core.internal.modules.leakdetector.c.a(SourceFile:37)
                                                     at cn.hikyson.godeye.core.a.a(SourceFile:68)
                                                     at cn.hikyson.godeye.core.a.a(SourceFile:60)
                                                     at com.this.is.my.package.MainApplication.onCreate(SourceFile:XXX)

多个项目issue

多个项目同时接入,可以在浏览器面板上作区分吗

can't resolve the newest plugin

ERROR: Failed to resolve: cn.hikyson.godeye:godeye-monitor:2.7.3
Show in Project Structure dialog

ERROR: Failed to resolve: cn.hikyson.godeye:godeye-core:2.7.3
Show in Project Structure dialog

ERROR: Failed to resolve: cn.hikyson.godeye:godeye-toolbox:2.7.3
Show in Project Structure dialog

ERROR: Failed to resolve: cn.hikyson.godeye:godeye-monitor-no-op:2.7.3
Show in Project Structure dialog

大佬麻烦看下我这个集成有什么问题

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesWithMethodCanaryTransformForDebug'.

Invalid opcode 169

  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithMethodCanaryTransformForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.accept(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.accept(ExecuteActionsTaskExecuter.java:117)
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:184)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ResolveIncrementalChangesTaskExecuter.execute(ResolveIncrementalChangesTaskExecuter.java:84)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:92)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
    at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
    at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:63)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:46)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: java.lang.IllegalArgumentException: Invalid opcode 169
    at org.objectweb.asm.commons.AdviceAdapter.visitVarInsn(AdviceAdapter.java:355)
    at org.objectweb.asm.ClassReader.readCode(ClassReader.java:2174)
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1283)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:688)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:400)
    at org.objectweb.asm.ClassReader$accept.call(Unknown Source)
    at cn.hikyson.methodcanary.plugin.TransformHandler.handleJarInputs(TransformHandler.groovy:118)
    at cn.hikyson.methodcanary.plugin.TransformHandler$_handle_closure1$_closure4.doCall(TransformHandler.groovy:59)
    at cn.hikyson.methodcanary.plugin.TransformHandler$_handle_closure1.doCall(TransformHandler.groovy:58)
    at cn.hikyson.methodcanary.plugin.TransformHandler.handle(TransformHandler.groovy:54)
    at cn.hikyson.methodcanary.plugin.TransformHandler$handle.call(Unknown Source)
    at cn.hikyson.methodcanary.plugin.MethodCanaryTransform.transform(MethodCanaryTransform.groovy:42)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:73)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$4.run(ExecuteActionsTaskExecuter.java:337)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:326)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:311)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:75)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:158)
    at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:46)
    at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
    at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
    at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
    at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
    at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:49)
    at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:42)
    at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:28)
    at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:136)
    at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:60)
    at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:37)
    at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
    at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
    at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
    at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:95)
    at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:88)
    at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
    at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
    at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:109)
    ... 37 more

  • Get more help at https://help.gradle.org

在我手机上崩溃,用readMe里提供的apk

5.1的系统

 Process: cn.hikyson.godeyedemo, PID: 27087
    io.reactivex.exceptions.OnErrorNotImplementedException: totalTime must greater than 0
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
        at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)
        at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155)
        at io.reactivex.internal.operators.observable.ObservableConcatMap$SourceObserver$InnerObserver.onError(ObservableConcatMap.java:254)
        at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
        at io.reactivex.internal.observers.BasicFuseableObserver.fail(BasicFuseableObserver.java:110)
        at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:61)
        at io.reactivex.internal.operators.observable.ObservableTimer$TimerObserver.run(ObservableTimer.java:67)
        at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
        at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: cn.hikyson.godeye.core.internal.exception.GodEyeInvalidDataException: totalTime must greater than 0
        at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:61)
        at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:55)
        at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
        at io.reactivex.internal.operators.observable.ObservableTimer$TimerObserver.run(ObservableTimer.java:67) 
        at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38) 
        at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
        at java.lang.Thread.run(Thread.java:818) 

English Translation

Hai.. thanks for who make this an awesome tools to monitor resource usage in Android, but i wonder how to see an English translation in this monitoring tools, thanks in advance.

RxPermissionsFragment 冲突

初始化时, 这行代码 .install(new LeakConfig(this,new RxPermissionRequest()))导致crash, 必现.
com.tbruyelle.rxpermissions2.RxPermissionsFragment cannot be cast to cn.hikyson.android.godeye.toolbox.rxpermission.RxPermissionsFragment
我项目中使用了RxPermissions;

(BUG AndroidGodEye version 6.0 ) The Application crashes when i click on Block option

Project Information

Expected behavior

after opening the application when I click on Block option the Application should not crash

Actual behavior

The Application crashes when I click on Block option

How to reproduce

  • Download the application

  • open the Application

  • click on BLOCK option

  • Note the Error

  • Browser/App version: 6.0

  • Operating system: 6.0

Recording Of The Bug

20190723_144739

Logcat

E/AndroidRuntime(19687): FATAL EXCEPTION: main

E/AndroidRuntime(19687): Process: cn.hikyson.godeyedemo, PID: 19687

E/AndroidRuntime(19687): java.lang.IllegalStateException: Could not execute method of the activity

E/AndroidRuntime(19687): 	at android.view.View$1.onClick(View.java:4135)

E/AndroidRuntime(19687): 	at android.view.View.performClick(View.java:5076)

E/AndroidRuntime(19687): 	at android.view.View$PerformClick.run(View.java:20279)

E/AndroidRuntime(19687): 	at android.os.Handler.handleCallback(Handler.java:739)

E/AndroidRuntime(19687): 	at android.os.Handler.dispatchMessage(Handler.java:95)

E/AndroidRuntime(19687): 	at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime(19687): 	at android.app.ActivityThread.main(ActivityThread.java:5910)

E/AndroidRuntime(19687): 	at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(19687): 	at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime(19687): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)

E/AndroidRuntime(19687): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

E/AndroidRuntime(19687): Caused by: java.lang.reflect.InvocationTargetException

E/AndroidRuntime(19687): 	at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(19687): 	at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime(19687): 	at android.view.View$1.onClick(View.java:4130)

E/AndroidRuntime(19687): 	... 10 more

E/AndroidRuntime(19687): Caused by: java.lang.NumberFormatException: Invalid long: ""

E/AndroidRuntime(19687): 	at java.lang.Long.invalidLong(Long.java:124)

E/AndroidRuntime(19687): 	at java.lang.Long.parseLong(Long.java:345)

E/AndroidRuntime(19687): 	at java.lang.Long.parseLong(Long.java:321)

E/AndroidRuntime(19687): 	at cn.hikyson.godeyedemo.MainActivity.block(MainActivity.java:92)

几点建议

1.如果改成websocket通信效率会更好

2.demo apk中有资源文件报500

io.reactivex.exceptions.OnErrorNotImplementedException: not valid ratio

FATAL EXCEPTION: RxComputationThreadPool-8
Process: cn.hikyson.android.godeye.sample, PID: 14665
io.reactivex.exceptions.OnErrorNotImplementedException: not valid ratio
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)
at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155)
at io.reactivex.internal.operators.observable.ObservableConcatMap$SourceObserver$InnerObserver.onError(ObservableConcatMap.java:254)
at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
at io.reactivex.internal.observers.BasicFuseableObserver.fail(BasicFuseableObserver.java:110)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:61)
at io.reactivex.internal.operators.observable.ObservableTimer$TimerObserver.run(ObservableTimer.java:67)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: cn.hikyson.godeye.core.internal.exception.GodEyeInvalidDataException: not valid ratio
at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:70)
at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:55)
at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:59)
at io.reactivex.internal.operators.observable.ObservableTimer$TimerObserver.run(ObservableTimer.java:67) 
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38) 
at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:818) 

LeakObject不显示

我直接在手机上安装了demo,通过JUMPTOLEAK进行内存泄漏的测试,但是WEB页面上只显示出了内存泄露的记录

snipaste_2018-03-01_17-14-15

我手机是华为Mate S,系统是Android5.1.1

CPU Engine totalTime must be greaterThan0

Showing stacktrace, it appears randomly after using the app for a bit

E/AndroidRuntime: FATAL EXCEPTION: RxComputationThreadPool-8
                                                   Process: com.myapp, PID: 29724
                                                   io.reactivex.exceptions.OnErrorNotImplementedException: totalTime must greater than 0
                                                       at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
                                                       at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
                                                       at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)
                                                       at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155)
                                                       at io.reactivex.internal.operators.observable.ObservableConcatMap$SourceObserver$InnerObserver.onError(ObservableConcatMap.java:254)
                                                       at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                       at io.reactivex.internal.observers.BasicFuseableObserver.fail(BasicFuseableObserver.java:110)
                                                       at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:61)
                                                       at io.reactivex.internal.operators.observable.ObservableTimer$TimerObserver.run(ObservableTimer.java:67)
                                                       at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38)
                                                       at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26)
                                                       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                                                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                       at java.lang.Thread.run(Thread.java:762)
                                                    Caused by: cn.hikyson.godeye.core.internal.exception.GodEyeInvalidDataException: totalTime must greater than 0
                                                       at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:61)
                                                       at cn.hikyson.godeye.core.internal.modules.cpu.CpuEngine$3.apply(CpuEngine.java:55)

引入工程后不能识别godeye

引入工程后,报godeye相关的class不能识别,不知道哪里姿势不对。这些install的class都是红色
GodEye.instance().install(Cpu.class, new CpuContextImpl())
.install(Battery.class, new BatteryContextImpl(this))
.install(Fps.class, new FpsContextImpl(this))
.install(Heap.class, Long.valueOf(2000))
.install(Pss.class, new PssContextImpl(this))
.install(Ram.class, new RamContextImpl(this))
.install(Sm.class, new SmContextImpl(this, 1000, 300, 800))
.install(Traffic.class, new TrafficContextImpl())
.install(Crash.class, new CrashFileProvider(this))
.install(ThreadDump.class, new ThreadContextImpl())
.install(DeadLock.class, new DeadLockContextImpl(GodEye.instance().getModule(ThreadDump.class).subject(), new DeadlockDefaultThreadFilter()))
.install(Pageload.class, new PageloadContextImpl(this))
.install(LeakDetector.class, new LeakContextImpl2(this, new PermissionRequest() {
@OverRide
public Observable dispatchRequest(Activity activity, String... permissions) {
return new RxPermissions(activity).request(permissions);
}
}));

关于release阶段上报

哈喽,麻烦问下,关于文档中说的在''提供了api供开发者在release阶段进行数据上报';上报部分有说明么?

打开控件就崩溃

app已经可以启动起来了,但是点击控件就崩溃,GodEyeMonitor.work(this);放到了application onCreate里,没有放到activity里,另外,浏览器查看性能数据,cpu无输出,heap、trafic、ram、pss都有输出,所有的监控项都install了,求指导,AndroidGodeye 1.7.4

02-11 16:57:54.037 19047-19047/com.testerclub.demo.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.testerclub.demo.test, PID: 19047
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.testerclub.demo.test/com.testerclub.core.base.PTWebViewActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394)
at android.app.ActivityThread.access$800(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5276)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:302)
at android.app.Activity.requestWindowFeature(Activity.java:3656)
at com.testerclub.TC.h5.activity.TCWebViewActivity.initView(TCWebViewActivity.java:46)
at com.testerclub.TC.h5.activity.TCWebViewActivity.onCreate(TCWebViewActivity.java:41)
at com.testerclub.core.base.BaseOfflineHybridActivity.onCreate(BaseOfflineHybridActivity.java:84)
at com.testerclub.core.base.PTWebViewActivity.onCreate(PTWebViewActivity.java:25)
at android.app.Activity.performCreate(Activity.java:6041)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1109)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2285)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394) 
at android.app.ActivityThread.access$800(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5276) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 

Block Threshold supports cache

image

It would be better if the block threshold supports cache, otherwise, I need to set the value every time I refresh the browser

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.