Je ne pense pas que vous pouvez le faire avec proguard seulement et je doute vraiment qu'il existe une solution simple (plugin que vous pouvez utiliser) avec mvn \ gradle \ sbt \ quoi que ce soit pour cela. Si vous êtes d'accord avec le code courant ou les commandes shell pendant votre construction, je peux vous recommander quelques blocs de construction, mais, comme les assembler dépend vraiment de la façon dont vous construisez votre projet, je peux seulement donner des suggestions de base ensemble.
L'idée générale est:
(1) utilisation jdeps (une partie et distribué avec jdk) pour aller chercher les dépendances (y compris transitif) de compilées .class
dossiers d'intérêt.
Dans votre cas, la sortie des dépendances récursives de some.class
(limité à root_package
) devrait être quelque chose comme:
jdeps -v -R -e "root_package.*" some.class
(2) grab jdeps
sortie et la transformer en config proguard (liste des classes à -keep
) .
(3) Dans votre fichier de configuration proguard principal include fichier de configuration que vous avez généré dans (2).
L'étape (2) nécessite la plupart des travaux de couture et peut être abordée différemment.
Ma suggestion consiste à utiliser les capacités de script de votre système de compilation pour exécuter jdeps
et effectuer une transformation de sortie. Maven, par exemple, a plugin that allows groovy scripts to be executed pendant la construction.
Si vous êtes plus à l'aise avec l'exécution de scripts shell, vous pouvez effectuer les opérations suivantes:
tuyau jdeps
sortie dans quelque chose comme:
grep -Po classname_regex
... pour ne garder que les noms de classe vous voulez conserver (vous pouvez utiliser des assertions de longueur nulle pour construire classname_regex
).
sortie du tuyau
de grep
en quelque chose comme:
awk '{print "-keep class " $0}
... pour obtenir config proguard et enregistrer la sortie vers un fichier.
Pouvez-vous expliquer pourquoi avez-vous besoin d'un tel «truc astucieux»? Quel est votre cas d'utilisation? – larsgrefer
@larsgrefer Bien sûr, je crée un outil qui vérifie que la classe que j'ai besoin de garder dans proguard a la bonne règle de proguard. Il serait plus facile pour moi de vérifier la présence d'une seule règle pour une classe 'A', que de comprendre manuellement toutes les classes référencées et vérifier la présence de règles pour chacune d'entre elles. –
Est-ce une question Android? –