2016-09-30 5 views
4

Когда я использую правило защиты pro-guard по умолчанию в папке инструментов Android SDK, я получаю ошибку для ScreenDensity. Что такое правило защиты, чтобы сохранить это StringDefScreenDensity от получения запутанных?Что такое правило защиты для аннотации StringDef в android?

+0

Сначала вы должны прочитать о 'RetentionPolicy.SOURCE', а затем беспокоиться о Proguard –

+0

@BartekLipinski - Я пытался RetentionPolicy.CLASS, но получаю ту же ошибку. Любая идея, что может быть неправильным? –

+0

Можете ли вы отправить сообщение об ошибке? –

ответ

2

Попробуйте добавить это правило Proguard:

-keepclassmembers class ** { 
    @your.package.AssetsHelper.ScreenDensity public *; 
} 
+0

Это то, что сработало для меня класс -keepclassmembers ** { @ com.citruspay. graphics.AssetsHelper.ScreenDensity public *; } ' –

+0

Я также добавил аннотацию @Keep для класса, а также поля. –

0

Чтобы исправить ошибки и заставить ProGuard поддерживать определенный код, добавьте в файл конфигурации ProGuard строку -keep. Например:

-keep public class MyClass 

В качестве альтернативы, вы можете добавить @Keep аннотацию код, который вы хотите сохранить. Добавление @Keep в класс сохраняет весь класс как есть. Добавление этого метода или поля будет поддерживать метод/поле (и его имя), а также имя класса неповрежденным. Обратите внимание, что эта аннотация доступна только при использовании библиотеки поддержки аннотаций.

Проверить proguard

+1

Я пробовал, чтобы ваше решение не работало. :( –

0

StringDef является Источник аннотации политики хранения. Поэтому он будет автоматически отключен в скомпилированном коде.

Исходные аннотации предназначены для применения правил промпрограммистов для использования конкретных константов вместо «магических» чисел или строк, что ничего не значит для кого-то, незнакомого с кодом.

+0

Мой код отлично работает в режиме отладки, когда не применяется правило защиты. Поэтому я думаю, что он тоже должен работать в режиме деблокирования. –