Error Types
Report Handled Exceptions
Analyze Errors
Troubleshooting
Configure Error, Exception, and Crash Monitoring for Android
Overview
The GermainUX Mobile App library can collect:- Crashes caused by unhandled exceptions
- Handled exceptions reported by application code
- Application errors that do not throw an exception
- Selected Android StrictMode violations, when enabled and supported
- Application uptime and closure context associated with a crash
Error Types
Use the appropriate GermainUX event for each condition:Automatic Crash Detection
Unhandled-exception monitoring is enabled automatically after GermainUX initialization unless it is explicitly disabled:- Exception type
- Error message
- Stack trace
- Crash timestamp
- Application version
- Android and device context
Show all 10
Show all 10
- Active user session
- Related screen or fragment
- Application uptime
- Application-closure event
Disable Automatic Crash Detection
Disable automatic monitoring only when required, such as when:- Another crash handler must remain solely responsible for uncaught exceptions.
- The application implements a custom crash-reporting workflow.
- Crash reporting is disabled for a specific build type.
- Consent or privacy requirements prevent automatic collection.
Java
Kotlin
Report a Crash Explicitly
UsecollectCrash() only when the application is treating the condition as a crash or terminal failure.
Java
Kotlin
collectCrash() also records application closure and uptime context. Do not use it for a condition after which the application continues normally. Use collectException() or collectError() instead.
Avoid catching Throwable solely for monitoring in normal application code. The preceding example represents a terminal boundary where the failure is reported and rethrown.
Report Handled Exceptions
UsecollectException() inside existing exception-handling logic when the exception is operationally meaningful.
Basic example
Java:Custom exception name
Use a stable custom name when the default exception class does not provide enough business or technical context. Java:Report Application Errors
UsecollectError() when an important failure occurs without an exception.
Examples include:
- Invalid response received from a service
- Required application data missing
- Business transaction rejected unexpectedly
- Local data synchronization failed
- Expected result not produced
- Application entered an invalid state
Java
Kotlin
- Passwords
- Authentication tokens
- Payment information
- Personal or health information
- Full request or response bodies
- Database records
- Secret URLs or query parameters
StrictMode Violations
Android StrictMode can identify development and runtime policy violations such as:- Disk reads or writes on monitored threads
- Network operations on the main thread
- Slow calls
- Resource mismatches
- Leaked closable objects
- Leaked activities or registrations
Show all 10
Show all 10
- File URI exposure
- Cleartext network use
- Untagged sockets
- Unsupported non-SDK API usage
Categorize Errors in GermainUX
Configure categories that distinguish:- Application crashes
- Handled exceptions
- Application errors
- StrictMode violations
- User-facing software errors
- Silent software errors
Show all 9
Show all 9
- Expected user validation
- Network and integration failures
- Data and synchronization failures
Analyze Errors
Use GermainUX dashboards to analyze errors by:- Error or exception name
- Exception class
- Application version
- Android version
- Device manufacturer and model
- Screen or fragment
Show all 12
Show all 12
- Transaction
- User session
- User or role, when approved
- First and last occurrence
- Affected users and sessions
- Frequency and trend
Alerts
Configure alerts for conditions such as:- New crash signature
- Increased crash rate
- Critical transaction failure
- Repeated handled exception
- Application-version regression
- Error affecting many users
- Sudden increase in StrictMode violations
- Missing crash data after a known failure
Privacy and Obfuscation
Before enabling error reporting:- Review exception messages and stack traces for sensitive data.
- Anonymize or exclude sensitive fields.
- Avoid dynamic personal data in exception names.
- Restrict access to diagnostic information.
- Retain R8 or ProGuard mapping files for each release.
- Protect mapping files because they reveal application structure.
- Apply an appropriate retention period.
Validation
Test the integration in a nonproduction build:Initialize GermainUX
Report a controlled application error
Report a handled exception
Trigger an unhandled exception in a safe test scenario
Confirm that the crash is associated with the correct session
Verify application, version, device, screen, and transaction context
Confirm that the release build provides usable stack traces
Verify that sensitive values are excluded
Test alert thresholds and recipients
Confirm that another installed crash handler still works, if applicable
Troubleshooting
Unhandled crashes are not collected
Verify that:- GermainUX initializes before the crash occurs.
- Automatic unhandled-exception monitoring is enabled.
- Another library has not replaced the GermainUX exception handler.
- The device can reach the ingestion endpoint.
- The release build includes the GermainUX library.
- Privacy or processing rules do not discard the event.
Handled exceptions are missing
Confirm that:collectException()executes.- The exception is not filtered by configuration.
- The application remains active long enough to distribute telemetry.
- The GermainUX application and environment are enabled.
- The device has network connectivity.
Stack traces are unreadable
Check:- R8 or ProGuard configuration
- Preservation of source and line-number attributes
- Mapping-file retention
- Installed library compatibility
- Whether the exception was created without a meaningful stack trace
Duplicate crashes appear
Verify that:- The same failure is not reported manually and automatically.
- Multiple crash libraries are not forwarding the same event.
- Retry or retained-event delivery is deduplicated by the configured processing rules.
Get Help
Contact GermainUX Support
Can't find what you need?
The content of this document is proprietary to GERMAIN SOFTWARE.

