监控设备上的应用以检测​​崩溃

时间:2018-07-27 09:38:39

标签: android

我一直在寻找这个答案的高低,但似乎找不到任何能满足我需求的东西。

我需要创建一个应用程序/服务,该应用程序/服务可以检测设备上运行的任何应用程序的崩溃(RuntimeExceptions或Errors),因此我可以查看它是否属于我的其中之一,但是我一直反对使用不推荐使用的方法,系统应用程序要求和未记录的权限。

到目前为止的可能性:

当前解决方案

我创建了一个LogCat记录器,该记录器基本上会进行logcat转储,并过滤出我要查找的日志(RuntimeException和Error)以检测崩溃。基于MatLog:https://github.com/plusCubed/matlog

这有点复杂,因为我也反对 READ_LOGS 弃用: https://commonsware.com/blog/2012/07/12/read-logs-regression.html 但我并不特别需要实际的应用程序日志。

这有效,但似乎有些笨拙。有没有更好的方法来简单地监视任何正在运行的任务并查看是否发生了崩溃?理想情况下,我可以然后转储LogCat以获得堆栈跟踪,而不是不断监视。

TL; DR -监视设备上的应用以检测​​崩溃的最佳方法是什么?

谢谢

1 个答案:

答案 0 :(得分:2)

免责声明:这不是确定的答案,这是基于我的个人见解/经验,请阅读以下详细信息

阅读本部分

  

所以我可以看看它是否属于我

我认为您的目标是确定只是您的应用程序崩溃了,在这种情况下,即使您不太喜欢,我还是建议您在所有应用程序中实施fabric它。 我知道这很无聊,需要进行大规模的商店更新,但是有几个原因,这些是我现在想到的一个原因:

  1. 使用织物,您无需再次发明轮子。简而言之,crashlitics(织物)已经具有问题跟踪器,可浏览的错误列表,其中包含使用该应用程序的电话的详细信息以及错误日志记录的所有规范等所有规范。

  2. 使用“另一个应用程序”解决方案,您可以强制用户下载另一个应用程序。他们中的许多人可能不想这样做,因此您的日志被大部分用户截断了。如果您可以“强迫”用户下载外部日志应用程序(也许是B到B,我不知道),那么无论如何您都会增加所需的磁盘空间,而这个问题被人们低估了。

  3. 实现架构是3行代码,实现自定义的崩溃检测应用程序是一项更大的工作。

  4. 您还必须为调查创建一个Web /移动控制台。

为获得更好的答案,我将在如何添加Fabric的内容上添加两行(它们在我上面发布的链接re-link中都得到了很好的解释和报告):

在Fabric引用的 Gradle.build 文件中添加:

buildscript {
  repositories {
    maven { url 'https://maven.fabric.io/public' }
  }

  dependencies {
    // These docs use an open ended version so that our plugin
    // can be updated quickly in response to Android tooling updates

    // We recommend changing it to the latest version from our changelog:
    // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
    classpath 'io.fabric.tools:gradle:1.+'
  }
}

apply plugin: 'com.android.application'
// Put Fabric plugin after Android plugin
apply plugin: 'io.fabric'

repositories {
  maven { url 'https://maven.fabric.io/public' }
}
dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:23.1.1'
  compile 'com.android.support:design:23.1.1'
  compile('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
    transitive = true;
}

在清单中的<Application...>标签下,添加带有API KEY的行

<meta-data
    android:name="io.fabric.ApiKey"
      android:value="<FABRIC_API_KEY>"
/>

,如果还没有Internet权限,还添加Internet权限

<uses-permission android:name="android.permission.INTERNET" />

最后,在主activity中添加初始化程序

  Fabric.with(this, new Crashlytics());

并仅构建项目。

请注意

如果您的目的也是注册每个其他第三部分申请,那么这是另一个问题,目前我无法为您提供帮助。我认为您可以阅读电话的logcat并注册ERROR(或更高版本)日志。否则,创建启动器应用程序可能会起作用,因为它可以为您提供对其他应用程序的更完全控制。

只是说

即使不是一个完美的答案,我也想发布这个,因为也许其他意见可能会帮助您选择最适合自己的选择,希望对您有所帮助,如果我发现了对第3部分应用程序有用的东西,我将在这里实现尽快!

祝你好运!

编辑1

我找到了this个答案。它说您可以使用给定的代码读取android应用程序的logcat。

在这一点上,我建议您存储来自某些程序包名称(您的)应用程序的所有日志。这样,您将能够检测到您的应用程序日志并对其进行任何操作:)