Работая с проектом Android в Android Studio 3.2, включив Proguard и некоторые конкретные правила, я не могу выяснить следующее:
определенный пакет (и его подпакеты) в модуле библиотекииспользуемый клиентским кодом, сохраняется с помощью правила:
-keep public class com.mylib.mypackage.** {
public protected *;
}
Теперь в этом пакете также есть ряд закрытых для пакета классов, которые не должны выбираться этим правилом.Некоторые из этих классов эффективно запутываются, как в своих собственных именах, так и в именах своих членов, что нормально.
Вместо этого есть некоторые классы, реализующие открытые интерфейсы, чьи имена классов не запутываются, хотя я ожидаюим следует.Для полноты, их имена членов, когда они не являются частью интерфейса, эффективно запутываются.
Пример:
/* package */ class InternalComponent implements ExternalInterface {
// ExternalInterface is kept: Ok
// InternalComponent is kept: don't like, I'd like it renamed
@Override
public void ExternalMethod() {
// this is kept: Ok
}
public void InternalMethod() {
// this is renamed: Ok
}
}
Я хотел бы подчеркнуть, что InternalComponent
создается внутри некоторого другого (сохранено) и возвращается в клиентский код только через ExternalInterface
.
Как я могу также запутать имена их классов, если это возможно?
Edit # 1
После ответа @emandt на выходные файлы Proguard я дважды проверил, и com.mylib.mypackage.InternalComponent
указан в seeds.txt
, в котором согласно в этом сообщении перечислены все элементы, соответствующие правилам хранения.Поэтому, по какой-то причине, вышеприведенное правило также выбирает закрытые для пакета классы, которые мне все еще кажутся неправильными.
Edit # 2 Тем временем я закончил тем же путемпредложено @shizhen.Для полноты, чтобы распространить исключение на любой пакет с именем internal
, я изменил свое правило proguard следующим образом:
-keep public class !com.mylib.mypackage.**.internal.*, com.mylib.mypackage.** {
public protected *;
}
(обратите внимание на первую часть перед запятой, с префиксом!
)
Я отмечу ответ @shizhen, хотя мне хотелось бы узнать, почему в исходном правиле также выбираются компоненты, закрытые для пакетов.