Примечание: android.support.v4.app.NotificationCompatJellybean вызывает 'Field.getType'

Я использую ProGuard с моим проектом Android Studio. Когда я создаю свой релиз, я получаю следующее примечание:

Note: android.support.v4.app.NotificationCompatJellybean calls 'Field.getType'

Вот мой конфиг Gradle:

proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro'

Вот proguard-rules.pro:

-dontnote org.apache.http.conn.scheme.HostNameResolver
-dontnote org.apache.http.conn.**
-dontnote org.apache.http.params.**
-dontnote android.net.http.**

-dontnote **ILicensingService
-dontnote com.android.vending.billing.IInAppBillingService

Как я могу решить проблему этой заметки?

2 ответа

Добавьте следующую строку в ваш proguard-rules.pro файл:

-keepattributes Signature

Объяснение:

Ваша заметка не имеет ничего общего с android.support.v4.app.NotificationCompatJellybean специально, но с Field.getType.

Метод getType принадлежит java.lang.reflect.Field пакета отражения и может получить доступ к метаинформации, хранящейся в файлах классов Java. Тем не менее, эта метаинформация удаляется proguard (без правила выше)- поэтому предупреждение.

Смотрите также атрибуты, которые можно использовать с -keepattributes, Для атрибута Signature сказано следующее:

Определяет общую подпись класса, поля или метода. Компиляторам может понадобиться эта информация для правильной компиляции классов, которые используют универсальные типы из скомпилированных библиотек.
Код может получить доступ к этой подписи путем отражения.

Попробуйте добавить следующую строку в конфигурацию ProGuard:

-dontnote android.support.v4.app.NotificationCompatJellybean

NotificationCompatJellybean получит тип частного Notification.extras поля в его getExtras() метод. Но как это поле в Notification Класс из Android SDK вы можете просто проигнорировать эту заметку с помощью команды выше.

Другие вопросы по тегам