- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我开始使用 ACRA ( https://github.com/ACRA/acra ) 进行崩溃报告。测试时,一切都很完美。尽管如此,当我发布该应用程序时,我在 Google Play Console 中看到了一个错误,该错误是我发布的版本中的新错误,由 ACRA.init(this);
引起。 :
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication
(ActivityThread.java:6209)
at android.app.ActivityThread.access$1200 (ActivityThread.java:236)
at android.app.ActivityThread$H.handleMessage
(ActivityThread.java:1784)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:7032)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run
(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)
Caused by: java.lang.IllegalStateException:
at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1666)
at android.app.ContextImpl.startService (ContextImpl.java:1611)
at android.content.ContextWrapper.startService
(ContextWrapper.java:677)
at org.acra.sender.SenderServiceStarter.startService
(SenderServiceStarter.java:43)
at org.acra.util.ApplicationStartupProcessor.sendApprovedReports
(ApplicationStartupProcessor.java:75)
at org.acra.ACRA.init (ACRA.java:230)
at org.acra.ACRA.init (ACRA.java:156)
at org.acra.ACRA.init (ACRA.java:139)
at com.myapplication.MyApplication.onCreate
(MyApplication.java:132)
at android.app.Instrumentation.callApplicationOnCreate
(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication
(ActivityThread.java:6204)
MyApplication.java:132
的内容是:
ACRA.init(this);
讽刺的是,这意味着初始化 ACRA 导致了崩溃。为了提供一些背景信息,这是我的 ACRA.init(this)
:
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
ACRA.init(this);
我正在阅读 https://groups.google.com/forum/#!topic/acra-discuss/XUKJ5dFHBl0 上的讨论我读了马尔科姆·库克提出的解决方案:
For the benefit of anyone else I discovered what my problem was.
The class MyDBOpenHelper was being triggered from the onCreate method of a ContentProvider, which gets called before the application class's onCreate method. Resolved it for now by moving the acra init method call within the application class as follows
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
ACRA.init(this);
// some of your own operations before content provider will launch
}
我应该把ACRA.init(this);
放在哪里?我在public void onCreate()
中有它但它抛出了这个 java.lang.IllegalStateException
大部头书。所以我想我应该尝试将其放入 protected void attachBaseContext(Context base)
正如马尔科姆·库克建议的那样。任何人都可以确认ACRA.init(this);
的正确位置吗?是?谢谢。
更新1:
Practical Android: 14 Complete Projects on Advanced Techniques and Approaches ( https://www.amazon.com/dp/B078SK4W1M/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1 ) 的第 3 章提供了使用 ACRA 的项目示例,并在其 MyApplication.java 文件中使用了以下内容:
package com.wickham.android.crashlog;
import org.acra.annotation.ReportsCrashes;
import org.acra.*;
import android.app.Application;
@ReportsCrashes(
customReportContent = { ReportField.REPORT_ID,
ReportField.APP_VERSION_CODE,
ReportField.APP_VERSION_NAME,
ReportField.PACKAGE_NAME,
ReportField.PHONE_MODEL,
ReportField.ANDROID_VERSION,
ReportField.STACK_TRACE,
ReportField.TOTAL_MEM_SIZE,
ReportField.AVAILABLE_MEM_SIZE,
ReportField.DISPLAY,
ReportField.USER_APP_START_DATE,
ReportField.USER_CRASH_DATE,
ReportField.LOGCAT,
ReportField.DEVICE_ID,
ReportField.SHARED_PREFERENCES,
ReportField.CUSTOM_DATA },
//formKey = "",
formUri = "https://example.com/crashed.php",
httpMethod = org.acra.sender.HttpSender.Method.POST,
mode = ReportingInteractionMode.TOAST,
resToastText = R.string.msg_crash_text)
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
ACRA.init(this);
}
}
他们正在放置ACRA.init(this);
在public void onCreate()
。当我测试时它对我有用。尽管如此,当我发布该应用程序时,我已经在 Google Play Console 中看到了由 ACRA.init(this);
引起的崩溃。正如我在问题中所解释的。所以我想我可以尝试放置 ACRA.init(this);
在protected void attachBaseContext(Context base)
正如马尔科姆·库克建议的那样。谁能向我解释一下吗?
更新2:
阅读https://github.com/ACRA/acra/wiki/BasicSetup ,我看到他们有这个:
import org.acra.*;
import org.acra.annotation.*;
@AcraCore(buildConfigClass = BuildConfig.class)
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// The following line triggers the initialization of ACRA
ACRA.init(this);
}
}
更新3:
即使我把它放入 attachBaseContext
,ACRA 正在使我的应用程序崩溃:
java.lang.RuntimeException:
at android.app.LoadedApk.makeApplication (LoadedApk.java:1164)
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6529)
at android.app.ActivityThread.access$1900 (ActivityThread.java:267)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1963)
at android.os.Handler.dispatchMessage (Handler.java:109)
at android.os.Looper.loop (Looper.java:207)
at android.app.ActivityThread.main (ActivityThread.java:7470)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:958)
Caused by: java.lang.IllegalStateException:
at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1842)
at android.app.ContextImpl.startService (ContextImpl.java:1797)
at android.content.ContextWrapper.startService (ContextWrapper.java:664)
at org.acra.sender.SenderServiceStarter.startService (SenderServiceStarter.java:43)
at org.acra.util.ApplicationStartupProcessor.sendApprovedReports (ApplicationStartupProcessor.java:75)
at org.acra.ACRA.init (ACRA.java:230)
at org.acra.ACRA.init (ACRA.java:156)
at org.acra.ACRA.init (ACRA.java:139)
at com.myapp.MyApplication.attachBaseContext (MyApplication.java:126)
at android.app.Application.attach (Application.java:224)
at android.app.Instrumentation.newApplication (Instrumentation.java:1128)
at android.app.LoadedApk.makeApplication (LoadedApk.java:1156)
最佳答案
基于 https://github.com/ACRA/acra/issues/630 上的信息,我的解决方案是使用这个:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
ACRA.init(this, new ConfigurationBuilder(this).build(), false);
MultiDex.install(this);
}
在日志中,我可以看到 LOGCAT
显示这一行:
08-18 16:31:50.489 I/ACRA (11890): ACRA is enabled for com.myapp, initializing...
现在初始化成功了。
关于java - 我应该把 ACRA.init(this); 放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518920/
我可以使用 ACRA 库 通过处理未捕获的异常来管理强制关闭错误。报告可以成功发送到谷歌文档、电子邮件和自定义网络服务。 但是我想要的.. 如何将报告写入文件 [例如。 sdcard/myapp/my
我升级了我的应用程序使用的 ACRA 库4.5.0 到 4.6.0 但我收到 formKey 的编译错误它曾经与 4.5 一起工作。 声明如下: @ReportsCrashes( formKey
我想使用最新的 Acra 4.9.0 将崩溃报告写入文本文件。我不能举例说明这个最新版本。我尝试使用可用的文档。 Acra 已启用但它没有写入文件。 myApp package com.myApp;
我正在尝试将 ACRA 导入我的 Android 应用程序,但它没有报告强制关闭。我关注了guide但它仍然没有报告崩溃。任何建议为什么? xml: 偏好等级: public class Pref
我正在使用著名的 ACRA 错误报告工具将崩溃日志发送到我在 Google Doc 上上传的文档。 我已经按照下面提到的所有步骤 https://github.com/ACRA/acra/wiki/B
我们一直在使用 ACRA 来报告应用程序中的崩溃,但有时它似乎会报告我们已经在代码中处理异常的崩溃。这是 ACRA 的一个功能吗?如果是,我们可以将其设置为忽略已处理的异常吗?谢谢。 最佳答案 ACR
我已经在我的应用程序中实现了 ACRA 4.8.5,它已初始化并启用,但当我遇到错误时,它不会创建报告...我仅有的两个相关 ACRA 日志是: I/ACRA: ACRA is enabled for
我成功配置 ACRA 将捕获的异常发送到我的服务器,问题是我无法将报告插入数据库: @AcraCore(buildConfigClass = BuildConfig.class) @AcraHttpS
为了报告我的应用程序崩溃,以这种形式通过 Android Studio Gradle Dependencies 使用 Acra 库: dependencies { compile 'ch
使用 ACRA,当用户当时没有互联网时,错误报告会怎样? 我已经研究过,但找不到直接的答案。我发现它确实将报告存储在 SD 卡上。 是否会在联网后自动发送报告?或者我是否需要对此功能进行编程以发送无法
我使用 android/proguard/ACRA。谁能告诉我为什么我收到的崩溃报告的行号不正确(行号显然指向错误的陈述)? 我无法知道崩溃的确切行号,因此无法修复用户报告的错误,这真的很烦人谢谢 P
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: ACRA with android: How to execute code before crash is
ACRA 本身因一个奇怪的问题而崩溃: IllegalStateException:无法在 ACRA#init 之前访问 ErrorReporter 我有一个运行完美的 ACRA 4.3.0 应用程序
ACRA documentation集成崩溃报告包括 3 个简单的步骤: 1 - Install ACRA library 2 - 将以下内容添加到 AndroidManifest.xml 和
我正在构建一个原生 Android 应用程序。为了获得崩溃,我使用 ACRA 4.5 和 Native-Crash-Handler,正如 ACRA 的高级使用页面上建议的那样,用于捕获 native
我不想显示任何 toast 、通知和任何对话框,想在没有任何崩溃对话框的情况下静默发送崩溃报告,但是当我应用下面的代码时,我得到了默认的崩溃对话框。任何人都知道如何在静音模式下摆脱崩溃对话框。 @Re
我将 ACRA 与 bugsense.com 结合使用以获取错误报告。我可以使用它们从应用程序发送我的任意消息吗? 我希望它将用户的错误行为发送到错误感知服务器。执行此操作的唯一方法是生成异常吗? 我
我正在尝试将崩溃报告发送到电子邮件,但当我的应用程序崩溃时,什么也没有发生。我试着搞乱配置,但我一直收到错误(大多数是未知成员,就是这样)。这是我的类(class)代码。 @ReportsCr
当发生未处理的异常时,我正在使用 ACRA(Android 应用程序崩溃报告)发送数据。 openFileOutput() 等方法需要我 try catch iOExceptions。由于异常位于 t
我尝试使用 ACRA 作为错误报告器,我将 acra-4.6.1.jar 添加到我的项目中并创建了此类 ReportApp.java package org.qtproject.example.our
我是一名优秀的程序员,十分优秀!