Nie sądzę, że można to zrobić tylko z proguardem i naprawdę wątpię, że istnieje proste rozwiązanie (wtyczka, z której można korzystać) z mvn \ gradle \ sbt \ cokolwiek dla tego.
Jeśli masz problemy z uruchamianiem kodu lub poleceń powłoki podczas kompilacji, mogę polecić Ci kilka elementów, ale ponieważ ich połączenie naprawdę zależy od tego, jak budujesz swój projekt, mogę tylko podać podstawowe sugestie, jak je przykleić. razem.
Ogólna idea jest:
(1) Zastosowanie jdeps (część i dystrybuowane z JDK), aby pobrać zależnościami (w tym przechodni) z zestawionych .class
plików zainteresowania.
W twoim przypadku wpisywanie rekurencyjnych zależnościami some.class
(ograniczone do root_package
) powinno być coś takiego:
jdeps -v -R -e "root_package.*" some.class
(2) grab jdeps
wyjścia i przekształcenie go w PROGUARD config (lista klas -keep
) .
(3) W twoim głównym pliku konfiguracyjnym include plik konfiguracyjny wygenerowany w (2).
Krok (2) wymaga większości nóg i można do niego podejść inaczej.
Moja sugestia polega na używaniu dowolnych funkcji skryptowania, które twój system budowania musi uruchomić jdeps
i transformacji wyjścia.
Maven, na przykład, ma plugin that allows groovy scripts to be executed podczas kompilacji.
Jeśli jesteś bardziej wygodne uruchamianie skryptów powłoki można wykonać następujące czynności:
rura jdeps
wyjścia do czegoś podobnego:
grep -Po classname_regex
... aby zachować tylko nazwy klas chcesz zachować (możesz użyć asercji o zerowej długości do zbudowania classname_regex
).
wyjście rura grep
w coś podobnego:
awk '{print "-keep class " $0}
... dostać PROGUARD config i zapisywać dane wyjściowe do pliku.
Czy możesz wyjaśnić, dlaczego potrzebujesz takiej "podstępnej sztuczki"? Jaki jest twój przypadek użycia? – larsgrefer
@larsgrefer Oczywiście, tworzę narzędzie, które sprawdza, czy klasa, którą muszę zachować w proguardzie, ma prawidłową regułę proguard. Byłoby mi łatwiej zweryfikować obecność pojedynczej reguły dla klasy "A", niż ręcznie wymyślić wszystkie przywoływane klasy i zweryfikować obecność reguł dla wszystkich z nich. –
Czy to jest pytanie na Androida? –