我正在尝试将ACRA崩溃报告系统安装到我的android项目中。现在,我的项目已经扩展了一个类,Activity类。那我如何实施Acra项目呢?
当他们以正常方式陈述时,你必须上课。 MyApplication并使用Application扩展它。由于我已经在扩展Activity类,我不知道该怎么做......他们说:如果你的应用已经包含一个Application子类,请将ACRA添加到此类;但是,我不知道应该怎么做......
谢谢!
答案 0 :(得分:2)
只需创建一个MyApplication
类,其范围从Application
开始,执行他们对覆盖onCreate()
的说法,然后转到AndroidManifest。
您应该拥有<application>
,其中包含android:label
或android:theme
等值。只需在那里添加android:name=".MyApplication"
,您就可以开始了。
请注意,如果您的套餐是com.example.test
,MyApplication
必须在那里。如果你想将MyApplication放在其他任何地方,你必须指出它在哪里。
例如,如果您的软件包com.example.test
且MyApplication
位于com.example.test.application
,则必须将android:name=".application.MyApplication
添加到您的清单中。我强烈建议您仅为您的应用程序使用一个程序包,因为它会使您的项目原子化并使其更易于管理和维护。
答案 1 :(得分:1)
我已经发布了详细的教程。这使您可以为现有项目设置ACRA,并将其配置为向您的电子邮件地址发送电子邮件。 Link
答案 2 :(得分:1)
由于清单使用了应用程序。在清单中,只是将它添加到应用程序标记(包含所有活动):
android:name=".MyApplication"
例如:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name=".MyApplication"
android:theme="@style/AppTheme" >
由于易于初始化(因为它在启动时由Android系统自动初始化),因此永远不会报告。它可以在启动时立即崩溃并仍然报告。所以这是一个非常聪明的设置。
我的应用程序类看起来像这样:
@ReportsCrashes(
formUri = "https://backend.com",
customReportContent = { /* */ReportField.APP_VERSION_NAME, ReportField.PACKAGE_NAME,ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL,ReportField.LOGCAT },
mode = ReportingInteractionMode.TOAST,
resToastText = R.string.crash_toast_text
)
public class ACRAHandler extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
final ACRAConfiguration config = new ConfigurationBuilder(this)
.build();
// Initialise ACRA
ACRA.init(this, config);
}
}
如果您的实例使用的是Firebase,则可以在同一个应用程序扩展类中同时使用它们,而不会出现任何问题。我自己尝试了它并且它有效,错误报告或Firebase没有问题。
此外,ACRA的新链接现在位于Github:https://github.com/ACRA/acra/wiki/BasicSetup
我回答这个问题是因为很久以前答案来了,需要更新
答案 3 :(得分:-1)
应用程序子类需要维护一个全局应用程序状态,每个应用程序都不必对它进行子类化。如果你的应用还没有,你可以创建它。
示例:
/* do ACRA imports */
@ReportsCrashes(formKey = "x-x-x-x-x-x")
public class YourApplication extends Application{
public void onCreate(){
ACRA.init(this);
super.onCreate();
}
}
您还应该按照教程中的说明在清单文件中声明。