堆栈跟踪反混淆:带有ProGuard和Crashlytics的Android Studio

时间:2018-01-30 00:26:27

标签: android-studio firebase crashlytics android-proguard firebase-crash-reporting

堆栈跟踪反混淆的魔力如何与Android Studio,ProGuard和Crashlytics一起使用?

每个应用版本都会生成一个唯一的构建ID,据我所知,即使应用的versionCodeversionName没有更改,也会生成它:

<string name = "com.crashlytics.android.build_id">RANDOM_UUID</ string>

正如我假设的那样,在构建时,此构建ID与mapping.txt一起上传到Crashlytics服务器。反过来,每个崩溃报告都包含此构建ID。因此,Crashlytics服务器可以找到正确的mapping.txt,即使对于具有相同versionCodeversionName的构建也是如此。

但是,如果在构建期间我暂时失去了互联网连接,我不会注意到这一点?我试图在互联网关闭的情况下进行构建,并且成功,没有警告,没有错误。但我预计构建会失败,抱怨它无法将mapping.txt和构建ID上传到Crashlytics服务器。

那么,Gradle的Crashlytics插件如何在没有Internet的情况下处理构建?

并且假设,Crashlytics可以区分具有相同versionCodeversionName的构建,是否正确?

UPD。在我得到Mike的回答之前,我还通过在我的项目根目录中执行./gradlew tasks --all,找到了有关幕后内容的见解:

  • app:crashlyticsStoreDeobsRelease - 要调用的Crashlytics目标 完成发布版本之后。清理Crashlytics生成的 资源文件。缓存并将反混淆文件上传到Crashlytics 服务器。
  • app:crashlyticsUploadDeobsRelease - 上传已存储 将反混淆文件发送到Crashlytics。
  • app:crashlyticsUploadDistributionDebug - 将APK上传到 Crashlytics分发。
  • app:crashlyticsUploadDistributionRelease - 上传APK到 Crashlytics分发。
  • app:fabricGenerateResourcesDebug - 注入Fabric SDK使用的构建ID。
  • app:fabricGenerateResourcesRelease - 注入使用的构建ID Fabric SDK。

1 个答案:

答案 0 :(得分:1)

Mike来自Fabric。对于没有活动网络连接时发生的构建,我们在运行构建的机器上缓存映射构建ID对。当您恢复网络连接时,我们会上传缓存的数据。

是的,我们可以使用相同的versionNamesetFeatureToken()来区分构建,因为每个构建的唯一ID。这也是为什么你必须小心它的一代:)