Запретить Proguard удалять неиспользуемые свойства

63
4

У меня есть класс:

public static class Properties {
public final static Property Id = new Property(0, String.class, "id", true, "ID");
public final static Property Name = new Property(1, String.class, "name", false, "NAME");
public final static Property Email = new Property(2, String.class, "email", false, "EMAIL");
public final static Property ValidatedAt = new Property(3, long.class, "validatedAt", false, "VALIDATED_AT");
};

И следующее правило proguard:

-keep class **$Properties

Однако, когда я собираю сборку релизов, это вывод:

public class UserDao$Properties
{
public static final f a;
static
{
a = new f(0, String.class, "id", true, "ID");
new f(1, String.class, "name", false, "NAME");
new f(2, String.class, "email", false, "EMAIL");
new f(3, Long.TYPE, "validatedAt", false, "VALIDATED_AT");
}
}

(из декомпилированного APK)

Обратите внимание, что только поле Id установлено, остальные три не имеют (хотя их конструкторы присутствуют).

Остальные три поля не используются в коде, но используются GreenDAO с использованием отражения.

Как предотвратить удаление других трех полей?

я пытался

-keepclassmembers class **$Properties {
public final static Property *;
}

наряду с вышеприведенным правилом, но он не работает.

спросил(а) 2015-09-11T16:29:00+03:00 5 лет, 10 месяцев назад
1
Решение
63

Попробуй это

-keepclassmembers class **$Properties {
public static <fields>;
}

ответил(а) 2015-09-11T18:06:00+03:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема