Конечные классы Java, используемые в качестве констант, остаются после компиляции - PullRequest
0 голосов
/ 19 декабря 2018

Я использую класс final в качестве константы для моих static final переменных.Я создал свой класс final, как показано ниже.

public final class ColorShape {
    public static final int CIRCLE = 1, SQUARE = 2;
}

Так что его следует использовать как константу и удалять после того, как код скомпилирован в Android-apk или java-банку.

Это почти наполовину верно, так как класс остается после того, как я скомпилировал его для Android APK.

Это то, что я вижу после декомпиляции моего Android APK

public final class ColorShape {

}

Редактировать: я такжепопытался использовать ключевое слово abstract вместо final, и результат был тот же, что и в итоге:

public abstract class ColorShape {

}

my final ints пропал, но класс не пропал. Есть ли причина, почему этобывает или как я могу это предотвратить?Я бы тоже хотел избавиться от класса.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я отключил свою Zelix KlassMaster запутывание, и поля больше не удаляются из классов, поэтому довольно ясно, что Zelix Klassmaster удаляет поле, а не классы.Поэтому я углубился в свой Zelix Klassmaster конфиг и увидел, что исключаю классы, которые нужно обрезать.и по этой причине их не убирали, как поля.

trimExclude             
package*.^* and
package*.*^ *(*);

Чего я не понимаю, так это то, почему ChangeLog не распечатывал, что Зеликс убирал поля.ChangeLog только что показал, что у меня не было fieldsOf моего класса, если кто-то может объяснить это для меня в комментариях, которые были бы действительно хороши.

0 голосов
/ 19 декабря 2018

Я думаю, что он удаляется ProGuard.

Цитата из https://developer.android.com/studio/build/shrink-code:

Сжатие кода доступно с ProGuard, который обнаруживает и удаляет неиспользуемые классы, поля, методы и атрибуты из вашего упакованного приложения, ...

...