ACRA/acra

Filter exceptions

henrichg opened this issue · 6 comments

Is possible to filter exceptions? For example android.os.DeadSystemException. Is not good for my users to generate ACRA notification for this excpetion.

This would be a job for a ReportingAdministrator, where you can filter for anything you want.

Good, and exists exaple for this, as for custom ReportSender?
https://github.com/ACRA/acra/tree/master/examples/acra-basic-java-example

@AutoService(ReportingAdministrator::class)
class MyReportingAdministrator: ReportingAdministrator {
    override fun shouldStartCollecting(context: Context, config: CoreConfiguration, reportBuilder: ReportBuilder): Boolean {
        return reportBuilder.exception !is DeadSystemException
    }
}

Hm implemented, but at start of application, this exception is generated:

Unable to load ReportingAdministrator
                                                     java.util.ServiceConfigurationError: org.acra.config.ReportingAdministrator: Provider sk.henrichg.phoneprofilesplus.CustomACRAReportingAdministrator could not be instantiated
                                                     	at java.util.ServiceLoader.fail(ServiceLoader.java:233)
                                                     	at java.util.ServiceLoader.access$100(ServiceLoader.java:183)
                                                     	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:392)
                                                     	at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
                                                     	at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
                                                     	at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.kt:49)
                                                     	at org.acra.plugins.ServicePluginLoader.loadEnabled(ServicePluginLoader.kt:32)
                                                     	at org.acra.builder.ReportExecutor.<init>(ReportExecutor.kt:227)
                                                     	at org.acra.reporter.ErrorReporterImpl.<init>(ErrorReporterImpl.kt:167)
                                                     	at org.acra.ACRA.init(ACRA.kt:171)
                                                     	at org.acra.ACRA.init(ACRA.kt:126)
                                                     	at org.acra.ACRA.init$default(ACRA.kt:124)
                                                     	at org.acra.ACRA.init(Unknown Source:13)
                                                     	at sk.henrichg.phoneprofilesplus.PPApplication.attachBaseContext(PPApplication.java:1402)
                                                     	at android.app.Application.attach(Application.java:370)
                                                     	at android.app.Instrumentation.newApplication(Instrumentation.java:1159)
                                                     	at android.app.LoadedApk.makeApplication(LoadedApk.java:1324)
                                                     	at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7469)
                                                     	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7440)
                                                     	at android.app.ActivityThread.access$1500(ActivityThread.java:301)
                                                     	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2148)
                                                     	at android.os.Handler.dispatchMessage(Handler.java:106)
                                                     	at android.os.Looper.loop(Looper.java:246)
                                                     	at android.app.ActivityThread.main(ActivityThread.java:8506)
                                                     	at java.lang.reflect.Method.invoke(Native Method)
                                                     	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
                                                     	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
                                                     Caused by: java.lang.IllegalAccessException: void sk.henrichg.phoneprofilesplus.CustomACRAReportingAdministrator.<init>() is not accessible from java.lang.Class<java.util.ServiceLoader$LazyIterator>
                                                     	at java.lang.Class.newInstance(Native Method)
                                                     	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
                                                     	at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416) 
                                                     	at java.util.ServiceLoader$1.next(ServiceLoader.java:494) 
                                                     	at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.kt:49) 
                                                     	at org.acra.plugins.ServicePluginLoader.loadEnabled(ServicePluginLoader.kt:32) 
                                                     	at org.acra.builder.ReportExecutor.<init>(ReportExecutor.kt:227) 
                                                     	at org.acra.reporter.ErrorReporterImpl.<init>(ErrorReporterImpl.kt:167) 
                                                     	at org.acra.ACRA.init(ACRA.kt:171) 
                                                     	at org.acra.ACRA.init(ACRA.kt:126) 
                                                     	at org.acra.ACRA.init$default(ACRA.kt:124) 
                                                     	at org.acra.ACRA.init(Unknown Source:13) 
                                                     	at sk.henrichg.phoneprofilesplus.PPApplication.attachBaseContext(PPApplication.java:1402) 
                                                     	at android.app.Application.attach(Application.java:370) 
                                                     	at android.app.Instrumentation.newApplication(Instrumentation.java:1159) 
                                                     	at android.app.LoadedApk.makeApplication(LoadedApk.java:1324) 
                                                     	at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7469) 
                                                     	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7440) 
                                                     	at android.app.ActivityThread.access$1500(ActivityThread.java:301) 
                                                     	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2148) 
                                                     	at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                     	at android.os.Looper.loop(Looper.java:246) 
                                                     	at android.app.ActivityThread.main(ActivityThread.java:8506) 
                                                     	at java.lang.reflect.Method.invoke(Native Method) 
                                                     	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
                                                     	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 

My custom adminstrator:

@AutoService(ReportingAdministrator.class)
public class CustomACRAReportingAdministrator implements ReportingAdministrator {

    CustomACRAReportingAdministrator() {
        Log.e("CustomACRAReportingAdministrator constructor", "xxxx");
    }

    @Override
    public boolean shouldStartCollecting(@NonNull Context context,
                                         @NonNull CoreConfiguration config,
                                         @NonNull ReportBuilder reportBuilder) {

       ...
    }
}

The exception is pretty clear: Your constructor needs to be public

Oh, yes. :-)

Thank you very much, working. ;-)