{"id":13848887,"url":"https://github.com/tomquist/Android-Error-Reporter","last_synced_at":"2025-07-12T13:33:05.264Z","repository":{"id":1241654,"uuid":"1179966","full_name":"tomquist/Android-Error-Reporter","owner":"tomquist","description":"Library to report unhandled exceptions in android projects","archived":true,"fork":false,"pushed_at":"2011-07-05T15:25:55.000Z","size":453,"stargazers_count":148,"open_issues_count":5,"forks_count":36,"subscribers_count":21,"default_branch":"master","last_synced_at":"2024-07-01T10:59:21.288Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomquist.png","metadata":{"files":{"readme":"README.mkdn","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-12-18T16:08:26.000Z","updated_at":"2024-03-14T20:43:27.000Z","dependencies_parsed_at":"2022-08-16T12:40:44.234Z","dependency_job_id":null,"html_url":"https://github.com/tomquist/Android-Error-Reporter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomquist%2FAndroid-Error-Reporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomquist%2FAndroid-Error-Reporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomquist%2FAndroid-Error-Reporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomquist%2FAndroid-Error-Reporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomquist","download_url":"https://codeload.github.com/tomquist/Android-Error-Reporter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":213949844,"owners_count":15661680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T19:01:00.810Z","updated_at":"2024-08-04T19:03:33.740Z","avatar_url":"https://github.com/tomquist.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"Android Error-Reporter\n======================\n\nIntegration\n------------\nTo integrate **Android Error-Reporter** just follow four simple steps:\n\n1. Download android-error-reporter.jar and add it to your build path\n\n2. Inherit from one of the base classes `Reporting*` (e.g. `ReportingActivity`, `ReportingService` or `ReportingIntentService`) or register your context in every `onCreate()` of your activity or context, e.g.: \n\n    \n        @Override\n        protected void onCreate(Bundle savedInstanceState) {\n            ExceptionReporter reporter = ExceptionReporter.register(this);\n            super.onCreate(savedInstanceState);\n        }\n    \n\n3. Add the `ExceptionReportService` to your `AndroidManifest.xml` (within the `\u003capplication/\u003e` node):\n\n\t\t\u003cservice\n\t\t\tandroid:name=\"de.quist.app.errorreporter.ExceptionReportService\"\n\t\t\tandroid:process=\":exceptionReporter\"/\u003e\n\n4. Configure the target URL where to send the errors by adding the following line to your `AndroidManifest.xml` (within the `\u003capplication/\u003e` node):\n\n\t\t\u003cmeta-data\n\t\t\tandroid:name=\"de.quist.app.errorreporter.targetUrl\"\n\t\t\tandroid:value=\"http://foo.bar/error.php\" /\u003e\n    \n    \nUsage\n-----\n\n### Report catched exceptions\n\nUnhandled exceptions are automatically handled by the ExceptionReportService. You can also report\ncatched exceptions by calling `exceptionHandler.reportException(thread, e)` or\n`exceptionHandler.reportException(thread, e, extraMessage)` on the ExceptionReporter\nobject returned by `ExceptionReporter.register(context)`. \nIf your activity/service inherits from one of the supplied base classes (`de.quist.app.errorreporter.Reporting*`), you can access the\nExceptionReporter via `getExceptionReporter()`.\n\n### User approved error reporting\n\nBy default errors are sent to the server automatically without asking the user for permission. This can be\nchanged by adding the `ExceptionReportActivity` to your `AndroidManifest.xml`. To do so, add the following line:\n\n\t\u003cactivity\n\t\tandroid:name=\"de.quist.app.errorreporter.ExceptionReportActivity\"\n\t\tandroid:process=\":exceptionReporter\"\n\t\tandroid:theme=\"@android:style/Theme.NoDisplay\"/\u003e\t\t\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://github.com/tomquist/Android-Error-Reporter/raw/master/README_images/notification.png\"/\u003e\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://github.com/tomquist/Android-Error-Reporter/raw/master/README_images/dialog.png\"/\u003e\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://github.com/tomquist/Android-Error-Reporter/raw/master/README_images/dialog-message.png\"/\u003e\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\nThe exception reporter will automatically detect the defined activity and instead of automatically sending the\nreport a notification is created which will ask the user for permission to send the notification when clicked.\nYou have full control over the texts and icons of both, the notification and the report-dialog. All resources\ncan be specified by adding meta-data tags to your `AndroidManifest.xml` (within the `\u003capplication/\u003e` node) which reference to a string/drawable in\ntheir `android:resource`-attribute, e.g.:\n\n\t\u003cmeta-data\n\t\tandroid:name=\"de.quist.app.errorreporter.dialogMessageHint\"\n\t\tandroid:resource=\"@string/error_reporting_message_hint\"/\u003e\n\nSee attributes `de.quist.app.errorreporter.dialog*` and `de.quist.app.errorreporter.notification*` in the section __Configuration__ for more information abouth how to control the notification and dialog.\n\n### Retry-Rules\n\nThe ExceptionReportService tries to send the error to the URL specified in your `AndroidManifest.xml`.\nIf it fails it retries with an exponential back-off. The default configuration will increase the back-off\nup to 2^12 sec (about 1h8m) and will retry it 17 times until it gives up (this will result in a total\ntime span of 1s+2s+4s+8s+...2^12 s*5=8h). You can change these values by adding specific meta-data nodes to your `AndroidManifest.xml` (see __Configuration__)\n\nConfiguration\n-------------\nYou can add the following name/value pairs as a meta-data node to your `AndroidManifest.xml` (within the `\u003capplication/\u003e` node).\n\n__All names need to have `de.quist.app.errorreporter.` as a prefix__!!!:\n\n\u003ctable border=\"1\"\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003e\u003cb\u003eName\u003c/b\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003cb\u003eType\u003c/b\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003cb\u003eDefault\u003c/b\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/th\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003emaximumRetryCount\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e17\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eMaximum number of tries to send an error report\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003emaximumBackoffExponent\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e12\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eMaximum exponent for the back-off\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003ereportOnFroyo\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eboolean\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003efalse\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eDefines whether unhandled exception are reported on Android 2.2 (Froyo) and above or not, since Froyo has its own error-reporting system\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003eincludeFields\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eString\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003eall\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eComma-separated list of fields to send (field names as of section \u003cb\u003eServer\u003c/b\u003e). If the list contains \u003ctt\u003eall\u003c/tt\u003e, all available fields will be included\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogIcon\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e@android:drawable/ic_dialog_alert\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe icon of the dialog for user approved error reports. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogTitle\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e^1 crashed\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe dialog title for user approved error reports. You can use a template style text (\u003ctt\u003e^1\u003c/tt\u003e) where the first placeholder will be replaced by the application name. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogText\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e^1 crashed because of an unexpected error. Please help fixing the error by sending an error report.\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe text shown in the dialog for user approved error reports. You can use a template style text (\u003ctt\u003e^1\u003c/tt\u003e) where the first placeholder will be replaced by the application name. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogMessageHint\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ci\u003eUndefined\u003c/i\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eIf you specify this value, an additional text-input field will be shown in the dialog with the specified message as hint. The content will be sent as additional information in the \u003ctt\u003eextraMessage\u003c/tt\u003e field (see section \u003cb\u003eServer\u003c/b\u003e). \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogSendButton\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e@android:string/ok\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eText on the send-button of the dialog for user approved error reports. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003edialogCancelButton\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e@android:string/cancel\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eText on the cancel-button of the dialog for user approved error reports. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003enotificationIcon\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e@android:drawable/stat_notify_error\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eIcon of the notification for user approved error reports. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003enotificationTitle\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003e^1 crashed\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe notification title for user approved error reports. You can use a template style text (\u003ctt\u003e^1\u003c/tt\u003e) where the first placeholder will be replaced by the application name. \u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003enotificationText\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ctt\u003eClick here to help fixing the issue\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe notification text for user approved error reports. You can use a template style text (\u003ctt\u003e^1\u003c/tt\u003e) where the first placeholder will be replaced by the application name.\u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003enotificationTickerText\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eint\u003c/td\u003e\n\t\t\u003ctd\u003e\u003ci\u003eEmpty\u003ci\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe notification ticker text for user approved error reports. You can use a template style text (\u003ctt\u003e^1\u003c/tt\u003e) where the first placeholder will be replaced by the application name.\u003ci\u003e(Use the \u003ctt\u003eandroid:resource\u003c/tt\u003e attribute and reference to an existing resource)\u003c/i\u003e\u003c/td\u003e\n\t\u003ctr\u003e\n\u003c/table\u003e\n\t\t\n\n\nServer\n------\nThe server will receive error reports via HTTP-post requests. They will contain the following fields:\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003eexStackTrace\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe stack trace\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd\u003e\u003ctt\u003eexClass\u003c/tt\u003e\u003c/td\u003e\n\t\t\u003ctd\u003eThe exception class\u003c/td\u003e\n\t\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eexMessage\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe exceptions message\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eexDateTime\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe date and time when the exception happend in the format \"yyyy-MM-dd HH:mm:ssZ\" (SimpleDateFormat)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eextraMessage\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eA custom message which can be added to manual error reports\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eexThreadName\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe name of the thread the error has been thrown in\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eappVersionCode\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe version code (as defined in your AndroidManifest.xml)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eappVersionName\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe version name (as defined in your AndroidManifest.xml)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003eappPackageName\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe package name (as defined in your AndroidManifest.xml)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003edevAvailableMemory\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe devices available memory in bytes\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003edevTotalMemory\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe devices total memory in bytes\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003edevModel\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe phones model name (\u003ctt\u003eandroid.os.Build.MODEL\u003c/tt\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003edevSdk\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe phones sdk version (\u003ctt\u003eandroid.os.Build.VERSION.SDK\u003c/tt\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ctt\u003edevReleaseVersion\u003c/tt\u003e\u003c/td\u003e\n        \u003ctd\u003eThe phones release version (\u003ctt\u003eandroid.os.Build.VERSION.RELEASE\u003c/tt\u003e)\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomquist%2FAndroid-Error-Reporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomquist%2FAndroid-Error-Reporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomquist%2FAndroid-Error-Reporter/lists"}