Skip to main content
Skip table of contents

Android App Error and Exception Monitoring

Automatic crash detection for unhandled exceptions

If not disabled explicitly by setting GermainAPMConfiguration.setAutomaticUnhandledExceptionsMonitoring(false), detection of unhandled exceptions is automatically enabled and working once the Germain UX gets initiated. In addition we automatically collect Application Closed and Application Uptime events when a crash occurs. 

Germain UX will collect the following categories of crashes if Android Os throws related unhandled exception:

  • Disk Write crash

  • Disk Read crash

  • Network Operation crash

  • Custom Slow Call

  • Resource Mismatch

  • Unbuffered IO

  • Cursor Leak

  • Closeable Leak

  • Activity Leak

  • Instance Leak

  • Registration Leak

  • File URI Exposure

  • Cleartext Network crash

  • Content URI Without Permission

  • Untagged Socket crash

  • Non SDK API Usage

If needed you can also collect a crash explicitly by calling the following code (that will also collect Application Closed and Application Uptime events so if you don't want to collect these better call GermainAPM.collectError() or GermainAPM.collectException()):

Java:

JAVA
// ...
GermainAPM.collectCrash("CustomCrashName", e, false); // a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
// ...

Kotlin:

JAVA
// ...
GermainAPM.collectCrash("CustomCrashName", e, false) // a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
// ...

Handled exception notification

You can collect an exception explicitly by adding the following code to your handled exception logic.

Simplest integration example:

Java:

JAVA
try {
	URL url = new URL("localhost");
} catch (MalformedURLException e) {
    GermainAPM.collectException(e); // Just Throwable and we will do the rest
    // application handled exception code here
}

Kotlin:

JAVA
try {
	URL url = new URL("localhost");
} catch (e: MalformedURLException) {
    GermainAPM.collectException(e) // Just Throwable and we will do the rest
    // application handled exception code here
}

Custom integration example:

Java:

JAVA
try {
	URL url = new URL("localhost");
} catch (MalformedURLException e) {
    GermainAPM.collectException("CustomExceptionName", e, false); // More control as we can set a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
    // application handled exception code here
}

Kotlin:

JAVA
try {
	URL url = new URL("localhost")
} catch (e: MalformedURLException) {
    GermainAPM.collectException("CustomExceptionName", e, false) // More control as we can set a) exception name b) Throwable content c) tell if it was an exception thrown by StrictMode or not (false means not in StrictMode policy)
    // application handled exception code here
}

Error notification

You can collect an error event explicitly by adding the following code to your code:

Java:

JAVA
if(wrong_condition or value_is_wrong or an_error_occured_but_we_dont_throw_exception or ...){
    GermainAPM.collectError("CustomErrorName", "CustomErrorContent");
    // application logic here
}

Kotlin:

JAVA
if(wrong_condition or value_is_wrong or an_error_occured_but_we_dont_throw_exception or ...){
    GermainAPM.collectError("CustomErrorName", "CustomErrorContent")
    // application logic here
}

Component: Mobile App

Feature Availability: 8.6.0 or later

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.