ProGuard определяет синтаксис "держать" здесь.
[@annotationtype] [[!]public|final|abstract|@ ...] [!]interface|class|enum classname
[extends|implements [@annotationtype] classname]
[{
[@annotationtype] [[!]public|private|protected|static|volatile|transient ...] <fields> |
(fieldtype fieldname);
[@annotationtype] [[!]public|private|protected|static|synchronized|native|abstract|strictfp ...] <methods> |
<init>(argumenttype,...) |
classname(argumenttype,...) |
(returntype methodname(argumenttype,...));
[@annotationtype] [[!]public|private|protected|static ... ] *;
...
}]
Можно ли использовать обобщенные модификаторы и типы?
Например -keep * * my.package.MySomething { *; }
-keep * * my.package.MySomething { *; }
Первый *
будет означать что-нибудь из этой части: [!]public|final|abstract|@...]
и
второй *
будет означать что-нибудь из этой части: [!]interface|class|enum
.
Чуть более подробно я пытаюсь генерировать аргументы ProGuard динамически, и я НЕ знаю, является ли my.package.MySomething
abstract class
или public enum
или чем-то еще.
Есть ли способ, вариант в ProGuard, который может помочь мне в этом?
Конфигурация
-keep class my.package.MySomething { *; }
делает то, что вы хотите. Вы бы добавили модификаторы доступа, если хотите еще больше ограничить совпадения (например, public или интерфейс вместо класса).