避免App无法启动以及多次启动崩溃的框架,启动崩溃的最后防线。
- 崩溃检测及分级策略:两次崩溃执行一级安全模式,三次崩溃执行二级安全模式;
- 提供自修复能力,可自定义进入安全模式的处理策略;
- 提供阻塞进程能力,可执行同步热修复;
- 提供详细崩溃信息的获取及崩溃的回调能力;
- 可定制崩溃后策略,例如重启的忽略策略;
- 提供快速回归的能力;
主要针对应用启动阶段崩溃,例如接口错误、文件损坏等,可能会发生连续Crash;而即便是有热修复,但Crash发生在热修复之前也是无能为力。因此我们需要一道防线,可以对App进行主动的自修复,同时提供同步的热修复能力;那么任何启动崩溃就都不怕了。
- Gradle中配置;
compile 'com.startup:protector:1.0.1'
-
初始化;
- Application中设置;
Protector.getInstance() .addTask(new Runnable() {// register Runnable to be executed when firstlevel crash occured. @Override public void run() { Toast.makeText(getApplicationContext(), "执行注册逻辑", 1).show(); } }) .addSynchronousTask(new TestProtectorTask()) .addCrashManager(new TestCrashManager()) .setCrashCallBack(new TestCrashCallBack()) .setRestart(false) .init(ProtectorApp.this);
备注:框架的注册需要在自定义的UncaughtExceptionHandler之后。
-
退出应用的时候调用,崩溃的统计(策略触发使用)会更加精确;
Protector.getInstance().lanuchSucceed();
-
备注;
使用addSynchronousTask()添加同步方法时,任务执行完毕不需要阻塞进程时务必要调用onPostExecute()方法,否则进程会一直阻塞;
- Application中设置;
方法 | 说明 |
---|---|
addTask | 注册行为在一级安全模式触发; |
addSynchronousTask | 注册阻塞的行为在二级安全模式触发,例如热修复等; |
addCrashManager | Crash的管理类,决定是否重启,例如场景重启; |
setCrashCallBack | Crash的回调,可获取到崩溃的信息,有原始的Throwable以及整理后的Msg; |
setRestart | 设置是否重启,默认为true;true的状态下根据CrashManager最终决定是否重启,false则一定不会重启; |
setDebug | Log的开关; |
使用过程可根据Log输出信息观察,tag为protector;
ProtectorTest.testJavaCrash();// 调用之后,应用就会崩溃;
如果使用了Proguard,则需要添加以下混淆规则;
-keep public class com.android.startup.protector.**{*;}
-keep class * implements com.android.startup.protector.iprotector.CrashCallBack{*;}
-keep class * implements com.android.startup.protector.iprotector.CrashManager{*;}
-keep class * extends com.android.startup.protector.iprotector.ProtectorTask{*;}