【发布时间】:2018-07-08 18:57:56
【问题描述】:
堆栈跟踪反混淆的魔力如何与 Android Studio、ProGuard 和 Crashlytics 配合使用?
每个应用程序构建都会生成一个唯一的构建 ID,据我了解,即使应用程序的 versionCode 和 versionName 没有更改,它也会生成:
<string name = "com.crashlytics.android.build_id">RANDOM_UUID</ string>
正如我假设的那样,在构建时,此构建 ID 与 mapping.txt 一起被上传到 Crashlytics 服务器。反过来,每个崩溃报告都包含此构建 ID。因此,Crashlytics 服务器可以找到正确的 mapping.txt,即使对于具有相同 versionCode 和 versionName 的构建也是如此。
但是,如果在构建过程中我暂时失去了 Internet 连接,我不会注意到这一点怎么办?我尝试在关闭 Internet 的情况下进行构建,并且成功,没有警告,也没有错误。但我预计构建会失败,抱怨它无法将 mapping.txt 和构建 ID 上传到 Crashlytics 服务器。
那么,Gradle 的 Crashlytics 插件如何在没有 Internet 的情况下处理构建?
假设 Crashlytics 可以区分具有相同 versionCode 和 versionName 的构建,是否正确?
UPD。在我得到 Mike 的回答之前,我还通过在我的项目根目录中执行 ./gradlew tasks --all 来了解幕后发生的事情:
- app:crashlyticsStoreDeobsRelease - 要调用的 Crashlytics 目标 完成发布构建后。清理 Crashlytics 生成的 资源文件。将反混淆文件缓存并上传到 Crashlytics 服务器。
- app:crashlyticsUploadDeobsRelease - 上传存储 将文件去混淆到 Crashlytics。
- app:crashlyticsUploadDistributionDebug - 将 APK 上传到 用于分发的崩溃分析。
- app:crashlyticsUploadDistributionRelease - 将 APK 上传到 用于分发的崩溃分析。
- app:fabricGenerateResourcesDebug - 注入 Fabric SDK 使用的构建 ID。
- app:fabricGenerateResourcesRelease - 注入由 Fabric SDK。
【问题讨论】:
标签: android-studio firebase crashlytics android-proguard firebase-crash-reporting