GithubHelp home page GithubHelp logo

testplanb / signal Goto Github PK

View Code? Open in Web Editor NEW
322.0 7.0 66.0 316 KB

library for android which can observe signal from native crash or ANR

Kotlin 53.71% CMake 15.54% C++ 7.65% C 23.10%
android anr crash

signal's Introduction

Signal

Android信号处理,兼容native crash 与anr,提供安全气囊方案与监控方案的基础设施,目前已添加native/java堆栈日志的回调,既可以当crash监控,又可以当安全气囊,开发你的脑洞吧!

更新:目前采取了新写法,去除复杂的spi调用,直接传入实现接口即可,同时核心代码迁移至c语言

详细介绍

https://juejin.cn/post/7114181318644072479 https://juejin.cn/post/7118609781832548383

使用说明

已发布到mavencenter仓库 gradle 导入

1.0.0-beta 暂时废弃,之后上传新版本
implementation 'io.github.TestPlanB:signal:1.0.0-beta'

本地使用

该项目可以用于本地配置使用,只需拷贝lib_signal这个module到自己的项目即可,请按照以下条件使用

1.拷贝lib_signal这个module到自己的项目

2.初始化SignalController对象,然后调用initWithSignals 初始化想要监听的信号,参数是int数组,内容为具体的信号值(如果想要监听anr,则初始化需要设置监听SIGQUIT),比如SIGQUIT, MyHandler是一个实现CallOnCatchSignal的类,可看第3点

 SignalController.initSignal(intArrayOf(
            SignalConst.SIGQUIT,
            SignalConst.SIGABRT,
            SignalConst.SIGSEGV),this,MyHandler())

3.创建一个实现CallOnCatchSignal接口的类,如项目的MyHandler(),重写如下三个方法,里面是自定义的信号处理逻辑

    // 收到sigquit之后,anr的逻辑,true就是进入anr判定
    fun checkIsAnr():Boolean
    // 处理anr的逻辑 logcat是当前logcat日志
    fun handleAnr(context: Context,logcat: String)
    // 处理crash的逻辑 logcat是当前logcat日志
    fun handleCrash(context: Context,signal: Int,logcat:String)

项目层级介绍

  • app下是使用例子
  • lib_signal 是Signal的封装实现

环境准备

建议直接用最新的稳定版本Android Studio打开工程。目前项目已适配Android Studio Arctic Fox | 2020.3.1

signal's People

Contributors

testplanb 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

signal's Issues

onCatchSignal没有调用

在c++方法中raise了SIGSEGV,使用Signal后性能平台确实收不到Crash上报了,但是Handler中的onCatchSignal没有调用,请问可能是什么原因呢

关于demo anr演示

demo的anr是一个死循环,由于系统机制不一定会立马产生anr,可以点击按钮后再点击回退键去尽快触发!

Utils中报空指针了

java.lang.NullPointerException: it must not be null
Utils.getLogcatByBufferName(Utils.kt:65)

while (br.readLine().also { line = it } != null)

java层堆栈获取

一开始只想着给使用者抛出native堆栈,java层堆栈可通过回调去抛出throwable获取,但是现在看来,还是加上比较好,避免有些朋友不知道呀

demo运行后直接闪退无任何提示

设备:小米 max3
系统:Android 10
现象描述:下载 demo 后直接运行,点击首页按钮直接闪退
log日志:
2023-01-02 00:24:54.825 10412-10412/com.example.signal I/hi_signal: 11 catch
2023-01-02 00:24:54.825 10412-10412/com.example.signal I/hi_signal: crash info pid:10412
2023-01-02 00:24:54.827 10412-10412/com.example.signal D/AndroidRuntime: Shutting down VM

--------- beginning of crash

2023-01-02 00:24:54.828 10412-10412/com.example.signal E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.signal, PID: 10412
java.lang.StackOverflowError: stack size 8192KB
at com.example.signal.MainActivity.throwNativeCrash(Native Method)
at com.example.signal.MainActivity.onCreate$lambda-0(MainActivity.kt:23)
at com.example.signal.MainActivity.$r8$lambda$__atZomnwlT46HKNaZgatRAAqwU(Unknown Source:0)
at com.example.signal.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7185)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1194)
at android.view.View.performClickInternal(View.java:7162)
at android.view.View.access$3500(View.java:819)
at android.view.View$PerformClick.run(View.java:27678)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

--------- beginning of system

2023-01-02 00:24:54.838 10412-10412/com.example.signal I/Process: Sending signal. PID: 10412 SIG: 9

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.