堆栈跟踪反混淆:Android Studio with ProGuard 和 Crashlytics
Stack trace deobfuscation: Android Studio with ProGuard and Crashlytics
堆栈跟踪去混淆的魔力如何与 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 插件如何在没有互联网的情况下处理构建?
假设 Crashlytics 可以区分具有相同 versionCode
和 versionName
的构建是否正确?
更新。在我得到 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 - 注入由
Fabric SDK.
这里是来自 Fabric 的迈克。对于在没有活动网络连接时发生的构建,我们在 运行 构建的机器上缓存映射构建 ID 对。当您恢复网络连接时,我们会上传缓存数据。
是的,我们可以区分具有相同 versionCode
和 versionName
的构建,因为每个构建都有唯一的 ID。这也是为什么你必须小心它的生成 :)
堆栈跟踪去混淆的魔力如何与 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 插件如何在没有互联网的情况下处理构建?
假设 Crashlytics 可以区分具有相同 versionCode
和 versionName
的构建是否正确?
更新。在我得到 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 - 注入由 Fabric SDK.
这里是来自 Fabric 的迈克。对于在没有活动网络连接时发生的构建,我们在 运行 构建的机器上缓存映射构建 ID 对。当您恢复网络连接时,我们会上传缓存数据。
是的,我们可以区分具有相同 versionCode
和 versionName
的构建,因为每个构建都有唯一的 ID。这也是为什么你必须小心它的生成 :)