2016-03-23 1 views
1

Я сейчас изучаю Прогуард, но я смущен восклицательным знаком! до пути к классу в настройках, таких как:Что означает восклицательный знак перед классом в ProGuard?

-keep класс! android.support.v7.view.menu. {*;} **

что это "!" делать? означает ли это, что proguard не будет удерживать этот класс? но если это так, зачем нам это нужно, поскольку proguard будет запутывать все классы?

+0

http://proguard.sourceforge.net/manual/usage.html#keepoptions –

ответ

2

Это означает то же самое! означает многие другие языки программирования. Это отрицает следующий выбор. Поэтому в вашем примере директива keep будет применяться ко всему, что есть , а не в следующем пакете/классе.

+0

благодарит Doug, так значит ли это, что если в моем файле конфигурации не будет храниться proguard, будет запутываться все классы? – Qing

+0

ProGuard попытается запутать как можно больше, да. Однако, по крайней мере, вы должны иметь стандартные правила Android в своем проекте или, вероятно, не будете работать после обфускации. –

+0

спасибо, чувак, последний вопрос для вас, у меня есть эта строка правил 1.-keep class! Android.support.v7.view.menu. ** {*;}, и он будет запутывать класс MenuBuilder в этом пакете, но после добавления этой строки правила # -keep interface android.support.v7. ** {*; }, класс MenuBuilder не запутан, но я не вижу здесь конфликта. не могли бы вы объяснить немного больше? Большое вам спасибо – Qing