Значок уведомления Android отличается, когда Proguard включен - PullRequest
0 голосов
/ 15 марта 2019

В настоящее время у меня есть приложение для Android (реагирует на родную), которое использует push-сервис Mixpanel (поверх службы сообщений Firebase)

Я указал значок, который установлен в моем файле манифеста, и ссылается на наборфайлы изображений, созданные в Android Studio (хранятся в Drawable)

Когда я запускаю приложение с вариантом отладки (proguard не включен) и отправляю push-уведомление удаленно, чтобы вызвать уведомление, в строке состояния появляется правильный значок, затем, когда вы опускаете панель уведомлений, рядом с заголовком появляется правильный значок

. Когда я создаю приложение с вариантом выпуска (proguard включен), при отправке push-уведомления появляется уведомление, но значокв верхнем трее возвращается иконка моего лаунчера.Когда я опускаю лоток, виден только красный кружок без значка.

Оба теста были выполнены на устройстве Android с уровнем API 28 (O)

Манифест 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, чтобы гарантировать, что построитель уведомлений и классы смешанных панелей могут правильно запускать уведомления,Как описано выше, появляется уведомление:

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

Я проанализировал выпуск APK, сгенерированный с помощью Android studio, и могу подтвердить, что доступный для использования актив присутствует в доступном для рисования (при просмотре resources.arsc)

Довольно озадачен этим, любая помощь будет оценена

1 Ответ

1 голос
/ 18 марта 2019

Наконец-то удалось найти проблему!

Proguard удалял классы ресурсов, которые Mixpanel SDK использует для загрузки ресурса уведомлений

Добавление

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

Чтобы моя гвардия исправила проблему В соответствии с инструкциями в комментарии к коду в Mixpanel SDK здесь:

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

...