堆栈跟踪反混淆:Android Studio with ProGuard 和 Crashlytics

Stack trace deobfuscation: Android Studio with ProGuard and Crashlytics

堆栈跟踪去混淆的魔力如何与 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.

的构建也是如此

但是,如果在构建过程中我暂时失去了 Internet 连接,而我不会注意到这一点怎么办?我尝试在关闭 Internet 的情况下进行构建,它是成功的,没有警告,也没有错误。但我预计构建会失败,抱怨它无法将 mapping.txt 和构建 ID 上传到 Crashlytics 服务器。

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

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

更新。在我得到 Mike 的答复之前,我还通过在我的项目根目录中简单地执行 ./gradlew tasks --all 来了解幕后发生的事情:

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

是的,我们可以区分具有相同 versionCodeversionName 的构建,因为每个构建都有唯一的 ID。这也是为什么你必须小心它的生成 :)