【问题标题】:How to keep fragment names in Firebase Analytics with Proguard?如何使用 Proguard 在 Firebase Analytics 中保留片段名称?
【发布时间】:2021-01-18 11:49:07
【问题描述】:

我正在使用此处描述的默认 Firebase Analytics 实施: https://firebase.google.com/docs/analytics/get-started?platform=android

但是当我在 Firebase 中检查结果时,片段的名称是“g,d,e,b”。如何在不硬编码片段名称的情况下解决此问题?

【问题讨论】:

  • 您需要指示proguard 保留某些类名。因此,如果您的片段位于某个包/文件夹 com.example.app.fragments 中,则可以使用-keepnames class com.example.app.fragments.*。如果这是您想要的,请告诉我将其发布为答案。
  • @Abkarino 你确定吗?我试过了,构建并分析了它,它似乎仍然被混淆了。我也不明白,为什么活动正常,碎片不正常。
  • 就是这样,我会说你下载 Jadx 并打开你的 apk,如果你看到带有原始名称的片段,那么它应该可以工作,否则你做错了。
  • 你能分享片段的完整路径和你在你的 proguards 文件中使用的编辑行吗?
  • @Abkarino 好的,我知道了,我必须创建完整路径,例如“com.example.fragments.*”,谢谢。

标签: android proguard firebase-analytics


【解决方案1】:

要在使用 ProGuards 时保留片段名称,您应该使用-keepnames

假设您有一个带有类标识符的片段

com.example.app.fragments.frag1

要排除该片段,您应该添加

-keepnames com.example.app.fragments.frag1 {}

要排除所有片段,包括子文件夹中的片段,请使用

-keepnames com.example.app.fragments.** {}

-keepnames-keep,allowshrinking 的缩写。如果您只使用-keep,您将失去所有 ProGuards 优化。

如果您希望属性保持其名称,请使用

-keepnames com.example.app.fragments.** {*;}

更多信息可以查看this.

【讨论】:

    【解决方案2】:

    根据@Abkarino 的回答,我想出了以下解决方案:

    -keep class com.packagename.fragments** { *; }
    

    其中“com.packagename.fragments”是项目中所有片段的根路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2012-06-13
      • 2015-08-31
      • 2017-07-08
      • 1970-01-01
      • 2014-10-28
      相关资源
      最近更新 更多