【问题标题】:android notification icon is different when proguard is enabled启用proguard时android通知图标不同
【发布时间】:2019-03-15 16:49:20
【问题描述】:

我目前有一个使用 Mixpanel 推送服务(在 Firebase 消息传递服务之上)的 android 应用(react native)

我已经指定了一个在我的清单文件中设置的图标,并引用了一组使用 android studio 生成的图像文件(存储在 drawable 中)

当我使用调试变体(未启用proguard)运行应用程序并远程发送推送以触发通知时,状态栏中会出现正确的图标,然后在拉下通知托盘时,会出现正确的图标到标题

当我使用发布变体(启用 proguard)构建应用程序时,发送推送时会出现通知,但顶部托盘中的图标会退回到我的启动器图标。当我拉下托盘时,只能看到一个没有图标资源的红色圆圈。

两项测试均在 API 级别 28 (O) 的 Android 设备上执行

Android 清单:

    <application
      ...
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
    />

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/my_notification" />

        <meta-data android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/my_red" />

我的 build.gradle 文件为发布启用了 proguard:

        release {
            minifyEnabled enableProguardInProductionBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }

我已将以下内容添加到我的 proguard 文件中,以确保通知生成器和 mixpanel 类可以正确触发通知。如上所述,通知正在出现:

-keep class com.mixpanel.android.mpmetrics.** { *; }
-keep class com.google.android.gms.** { *; }
-keep class android.support.v4.app.** { *; }

我已经分析了使用 Android studio 生成的发布 APK,并且可以确认可绘制资源存在于可绘制资源中(查看 resources.arsc 时)

对这个有点困惑,如果有任何帮助,将不胜感激

【问题讨论】:

  • 您使用的是哪个版本的 Firebase 消息库?

标签: android push-notification proguard android-proguard


【解决方案1】:

终于找到问题了!

Proguard 正在删除 mixpanel SDK 用于加载通知资产的资源类

添加

-keep class **.R$* { *; }

我的 proguard 解决了这个问题 根据 mixpanel SDK 中代码注释中的说明:

https://github.com/mixpanel/mixpanel-android/blob/master/src/main/java/com/mixpanel/android/mpmetrics/ResourceReader.java#L123

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2016-12-30
    相关资源
    最近更新 更多