Hello,
psryland wrote:
Hi there,
I'm trying to get some form of automatic crash reporting working for the app
I'm developing using http://code.google.com/p/acra/ acra . I've
successfully created a callable wrapper for the acra-4.2.3.jar and my
project builds, runs, and appears to call ACRA.Init() without any problems.
The main trouble I have is how to translate the annotation syntax from Java
to C#. I.e. In a java app, you specify the google form to send crash reports
to using this syntax:
@ReportsCrashes(formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ")
public class MyApplication extends Application {
...
}
I see M4A 4.2 has support for annotations but the generated ACW doesn't seem
to contain any 'ReportsCrashesAttribute'.
In short this seems to be a recent bug in 4.2.x (not sure when started).
We'll fix the issue hopefully by the next release (4.2.5).
The reason why it fails is: when you try to bind acra-4.2.3.jar, you'd
notice that there is a binding failure message, saying:
> Class Org.Acra.Annotation.ReportsCrashes has unknown base type
Our binding tool rejects to bind this type because the type description
xml does not actually tell the base class ("extends*" elements). It is
however the Java bytecode does not tell base class (which
is...java.lang.Object?) because(?) it is an @interface.
Now, back to the binding generator, it used to allow invalid base types
which somehow allowed annotation types like this. Then we have improved
our binding generator to reject/ignore those "invalid" types, this kind
of annotations became ignored, which is not good (since any annotations
likely fall into the same result).
Thanks for the feedback.
Atsushi Eno
To work around this, I tried to create a 'GoogleFormSender' explicitly
passing the form key as a construction parameter, but discovered the
'addReportSender' method is missing in the wrapper.
So I tried the following instead:
IntPtr java_class_handle = IntPtr.Zero;
IntPtr class_ref = JNIEnv.FindClass ("org/acra/ErrorReporter", ref
java_class_handle);
IntPtr method = JNIEnv.GetMethodID(class_ref, "addReportSender",
"(Lorg/acra/sender/ReportSender;)V");
JNIEnv.CallVoidMethod(Org.Acra.ErrorReporter.Instance.Handle, method,
new
JValue(new Org.Acra.Sender.GoogleFormSender(FormKey)));
This appeared to work, but when I try to report an error using:
Org.Acra.ErrorReporter.Instance.HandleSilentException(new
Throwable("Test
Problem"));
Logcat reports that it failed:
E/Visions Live BB(30458): Failed to send crash reports
E/Visions Live BB(30458): java.lang.NullPointerException
E/Visions Live BB(30458): at
org.acra.sender.GoogleFormSender.remap(GoogleFormSender.java:73)
E/Visions Live BB(30458): at
org.acra.sender.GoogleFormSender.send(GoogleFormSender.java:52)
E/Visions Live BB(30458): at
org.acra.ErrorReporter.sendCrashReport(ErrorReporter.java:850)
E/Visions Live BB(30458): at
org.acra.ErrorReporter.checkAndSendReports(ErrorReporter.java:960)
E/Visions Live BB(30458): at
org.acra.ErrorReporter$ReportsSenderWorker.run(ErrorReporter.java:142)
>From looking through the ACRA source code this is because the ACRA static
class has a null pointer to a 'ReportsCrashes' object that it would normally
get from the annotation.
So anyway, I was wondering if anyone has had any luck with automatic crash
reporting in a M4A project, and whether they could give me a leg up this.
I see in this post:
http://mono-for-android.1047100.n5.nabble.com/How-can-I-use-bug-trackers-like-Acra-or-BugSense-td5157636.html
that there are issues with unhandled exceptions not being caught but I was
planning to use high level "catch all" exception handlers that would report
anything caught as a crash.
Any help much appreciated,
Paul
--
View this message in context:
http://mono-for-android.1047100.n5.nabble.com/Automatic-crash-reporting-tp5710823.html
Sent from the Mono for Android mailing list archive at Nabble.com.
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid