Android 的 Crashlytics 报告混淆了 Proguard 和 Proguard 映射设置
Android's Crashlytics reports are obfuscated with Proguard and Proguard mapping setup
我的 Firebase Crashlytics 日志在使用 Proguard 时因某些崩溃而被部分混淆(仅方法名称),即使映射似乎已正确设置。
Proguard 映射一直工作到 9 月 12 日左右,这是最后一次 Gradle(通过 Jenkins)将 Uploading deobfuscation file
和相关日志记录到 ~/Library/Caches/com.crashlytics/com.crashlytics.tools/crashlytics.log
。现在,Gradle 不会记录任何 Proguard 混淆文件相关的日志或错误。另外,我检查了日期之前的 git 提交,以确保没有任何相关更改。
这是我的实现。我有文档中的 added/excluded Proguard 规则。
已添加:
-keep public class * extends java.lang.Exception
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
排除:
-printmapping mapping.txt
下面是一个方法名没有被混淆的例子:
com.app.android.coursetaking.nonvideo.ebook.EbookDataManager.a (SourceFile:18)
com.app.android.coursetaking.nonvideo.ebook.EbookViewModel.a (SourceFile:53)
com.app.android.viewmodel.RxViewModel.a (SourceFile:110)
com.app.android.viewmodel.RxViewModel.O (SourceFile:102)
com.app.android.coursetaking.nonvideo.ebook.AbstractEbookFragment.onViewCreated (SourceFile:98)
androidx.fragment.app.FragmentManagerImpl.a (SourceFile:1471)
androidx.appcompat.app.AppCompatActivity.onStart (SourceFile:178)
com.app.android.activity.BaseActivity.onStart (SourceFile:212)
com.app.android.core.activity.UserBoundActivity.onStart (SourceFile:63)
android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1391)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
如果我查找映射文件,我可以看到到混淆名称的映射。
我认为问题是在构建应用程序之后出现的,因为我可以看到映射文件。但是由于缺少 Firebase Crashlytics 的 Gradle 日志,我不确定接下来要看哪里。
最后,我尝试手动 运行 Gradle 任务来上传签名的 APK,crashlyticsUploadDistributionMainAppRelease
。找不到已签名的 APK:Crashlytics halted compilation because it can't distribute the unsigned APK path/to/release/app-mainApp-release.apk
即使已签名的 APK 在那里。
Fabric Crashlytics 是 Proguard 映射问题的原因。我使用的是版本 1.29.0
和版本 1.30.0
、they solved my problem: Fixed an issue preventing mapping files from being uploaded for Proguard builds with Android Gradle Plugin 3.5.
。升级到 1.31.1
.
版本后,现在可以在 Firebase Crashlytics 上查看未混淆的映射
我的 Firebase Crashlytics 日志在使用 Proguard 时因某些崩溃而被部分混淆(仅方法名称),即使映射似乎已正确设置。
Proguard 映射一直工作到 9 月 12 日左右,这是最后一次 Gradle(通过 Jenkins)将 Uploading deobfuscation file
和相关日志记录到 ~/Library/Caches/com.crashlytics/com.crashlytics.tools/crashlytics.log
。现在,Gradle 不会记录任何 Proguard 混淆文件相关的日志或错误。另外,我检查了日期之前的 git 提交,以确保没有任何相关更改。
这是我的实现。我有文档中的 added/excluded Proguard 规则。
已添加:
-keep public class * extends java.lang.Exception
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
排除:
-printmapping mapping.txt
下面是一个方法名没有被混淆的例子:
com.app.android.coursetaking.nonvideo.ebook.EbookDataManager.a (SourceFile:18)
com.app.android.coursetaking.nonvideo.ebook.EbookViewModel.a (SourceFile:53)
com.app.android.viewmodel.RxViewModel.a (SourceFile:110)
com.app.android.viewmodel.RxViewModel.O (SourceFile:102)
com.app.android.coursetaking.nonvideo.ebook.AbstractEbookFragment.onViewCreated (SourceFile:98)
androidx.fragment.app.FragmentManagerImpl.a (SourceFile:1471)
androidx.appcompat.app.AppCompatActivity.onStart (SourceFile:178)
com.app.android.activity.BaseActivity.onStart (SourceFile:212)
com.app.android.core.activity.UserBoundActivity.onStart (SourceFile:63)
android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1391)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
如果我查找映射文件,我可以看到到混淆名称的映射。
我认为问题是在构建应用程序之后出现的,因为我可以看到映射文件。但是由于缺少 Firebase Crashlytics 的 Gradle 日志,我不确定接下来要看哪里。
最后,我尝试手动 运行 Gradle 任务来上传签名的 APK,crashlyticsUploadDistributionMainAppRelease
。找不到已签名的 APK:Crashlytics halted compilation because it can't distribute the unsigned APK path/to/release/app-mainApp-release.apk
即使已签名的 APK 在那里。
Fabric Crashlytics 是 Proguard 映射问题的原因。我使用的是版本 1.29.0
和版本 1.30.0
、they solved my problem: Fixed an issue preventing mapping files from being uploaded for Proguard builds with Android Gradle Plugin 3.5.
。升级到 1.31.1
.