这一版本的主要目的是为了避免定制ACRA的Application子类。此前的规定是为了防止开发者同时使用其他的类库,例如 GreenDroid, RoboGuice, Droid-Fu 等。
通过配置ACRA的@ ReportsCrashes,已经很好的解决了此问题。
ACRA 允许你的Android应用将崩溃报告以谷歌文档电子表的形式进行发送。本教程将引导您在应用程序项目中安装ACRA。
按照以下步骤在现有的应用程序项目中安装ACRA库:
import org.acra.*;
import org.acra.annotation.*;
@ReportsCrashes(formKey ="dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ")
publicclassMyApplicationextendsApplication{
}
@Override
publicvoid onCreate(){
// The following line triggers the initialization of ACRA
ACRA.init(this);
super.onCreate();
}
This adds an android:name attribute to your application element like this (put the full name with package if the application class package is not the same as manifest root element declared pakage):<applicationandroid:icon="@drawable/icon"android:label="@string/app_name"
android:name="MyApplication">
This adds the following element as a child of the manifest element:<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
建议 : 可以在谷歌文档电子表格的preferences页面,设置通知规则,那么当有报告发送的时候,就会受到邮件通知了!
默认情况,ACRA仅仅是将崩溃报告发送到服务端。从使用应用的用户来看,应用崩溃的时候仅仅是"Force Close"对话框是不够的。
作为开发者,你可能更喜欢通知用户崩溃报告已经发送了...... 为什么不允许他描述一下崩溃之时他正在所操作的动作呢?
ACRA 提供了这些选项,并且允许定制崩溃报告通知。
有两种通知模式:
开启用户通知仅仅需要给@ReportsCrashes添加几个参数 :
@ReportsCrashes(formKey="dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ",
mode =ReportingInteractionMode.TOAST,
resToastText = R.string.crash_toast_text)
public class MyApplication extends Application{
...
在 strings.xml 中 :
<stringname="crash_toast_text">Ooooops ! I crashed, but a report has been sent to my developer to help him fix the issue !</string>
@ReportsCrashes(formKey="dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ",
mode =ReportingInteractionMode.NOTIFICATION,
resNotifTickerText = R.string.crash_notif_ticker_text,
resNotifTitle = R.string.crash_notif_title,
resNotifText = R.string.crash_notif_text,
resNotifIcon = android.R.drawable.stat_notify_error,// optional. default is a warning sign
resDialogText = R.string.crash_dialog_text,
resDialogIcon = android.R.drawable.ic_dialog_info,//optional. default is a warning sign
resDialogTitle = R.string.crash_dialog_title,// optional. default is your application name
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,// optional. when defined, adds a user text field input with this text resource as a label
resDialogOkToast = R.string.crash_dialog_ok_toast // optional. displays a Toast message when the user accepts to send a report.
)
public class MyApplication extends Application{
...
在 strings.xml 中:
<stringname="crash_notif_ticker_text">Unexpected error, please send a report...</string>
<stringname="crash_notif_title">CrashTest has crashed...</string>
<stringname="crash_notif_text">Please click here to help fix the issue.</string>
<stringname="crash_dialog_title">CrashTest has crashed</string>
<stringname="crash_dialog_text">An unexpected error occurred forcing the
application to stop. Please help us fix this by sending us error data,
all you have to do is click \'OK\'.</string>
<stringname="crash_dialog_comment_prompt">You might add your comments about the problem below:</string>
<stringname="crash_dialog_ok_toast">Thank you !</string>
在 AndroidManifest.xml中
<application ...>
....
<activityandroid:name="org.acra.CrashReportDialog"
android:theme="@android:style/Theme.Dialog"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:finishOnTaskLaunch="true"/>
....
</application>
仅仅需要给@ReportsCrashes指定 formUri 参数 :
@ReportsCrashes(formKey="",// will not be used
formUri="http://yourserver.com/yourscript",
mode =ReportingInteractionMode.TOAST,
resToastText = R.string.crash_toast_text)
public class MyApplication extends Application{
...
然后你的脚本必须按照 ErrorReporter 类指定字段.
当然!
仅仅需要使用一下的方法:
ErrorReporter.getInstance().putCustomData("myVariable", myVariable);
所有定制的数据 (only latest value for each one) 将被添加到"custom"字段
可以使用 getCustomData("myVariable") 和 removeCustomData("myVariable") 来增加或删除定制数据.
是的!
你所需要做的是添加给你的 preferences 文件添加一个CheckBoxPreference :
<CheckBoxPreferenceandroid:key="acra.disable"
android:title="@string/pref_disable_acra"
android:summaryOn="@string/pref_acra_disabled"
android:summaryOff="@string/pref_acra_enabled"
android:defaultValue="false"/>
如果你更喜欢用户允许默认选择发送报告,你可以按照如下配置:
<CheckBoxPreferenceandroid:key="acra.enable"
android:title="@string/pref_disable_acra"
android:summaryOn="@string/pref_acra_enabled"
android:summaryOff="@string/pref_acra_disabled"
android:defaultValue="true"/>
然后在你的 strings.xml 文件中添加3个string资源
作为一个优秀的程序员,你的代码充满了try / catch语句,有时意想不到的异常发生了,这是你可能很想获得当时的异常报告。
你也可能当应用出在某种状态的时候,发送一份报告给开发人员。
你只要按照以下方法就可以实现了 :
ErrorReporter.getInstance().handleException(caughtException);
你可以捕获或提供任何自定义异常。
如果你需要后台发送报告,而不管当前设置的是什么通知模式,你只需要按照以下方法即可:
ErrorReporter.getInstance().handleSilentException(caughtException);
http://code.google.com/p/acra/wiki/ACRA3HowTo?tm=6
http://code.google.com/p/acra/wiki/AdvancedUsage#Reports_destination