Ich glaube nicht, dass Sie das nur mit Proguard machen können und ich bezweifle wirklich, dass es eine einfache Lösung (Plugin, die Sie verwenden können) mit MVN \ GRADLE \ sbt \ was auch immer dafür.
Wenn Sie mit dem Ausführen von Code- oder Shellbefehlen während der Erstellung einverstanden sind, kann ich Ihnen einige Bausteine empfehlen, aber da sie zusammengesetzt sind, hängt davon ab, wie Sie Ihr Projekt erstellen zusammen.
Die allgemeine Idee ist:
(1) Verwendung jdeps (Teil und mit jdk verteilt) Abhängigkeiten zu holen (einschließlich transitiv) von kompilierten .class
Dateien von Interesse.
In Ihrem Fall der Ausgabe rekursive Abhängigkeiten von some.class
(begrenzt auf root_package
) soll so etwas wie:
jdeps -v -R -e "root_package.*" some.class
(2) greifen jdeps
Ausgang und verwandelt es in proguard config (Liste der Klassen -keep
) .
(3) In Ihrer Hauptprogard-Konfigurationsdatei include Konfigurationsdatei, die Sie in (2) erstellt haben.
Schritt (2) erfordert die meisten Beinarbeit und kann anders angegangen werden.
Mein Vorschlag ist, was auch immer Skript-Fähigkeiten Ihr Build-System jdeps
ausführen und Umwandlung ausführen muss.
Maven zum Beispiel hat plugin that allows groovy scripts to be executed während Build.
Wenn Sie sich wohler mit Lauf Shell-Skripte sind, können Sie wie folgt vorgehen:
Rohr jdeps
Ausgang in so etwas wie:
grep -Po classname_regex
... nur Klassennamen zu halten Sie möchten beibehalten (Sie können Assertionen der Länge Null verwenden, um classname_regex
zu erstellen).
Rohr Ausgang grep
in so etwas wie:
awk '{print "-keep class " $0}
... proguard Config zu erhalten und Ausgabe einer Datei speichern.
Können Sie erklären, warum brauchen Sie eine solche 'geschicktes trick'? Was ist dein Anwendungsfall? – larsgrefer
@larsgrefer Sicher, ich erstelle ein Tool, das überprüft, dass die Klasse, die ich in Schritt halten muss, die richtige Proguard-Regel hat. Es wäre für mich einfacher, das Vorhandensein einer einzelnen Regel für eine Klasse "A" zu überprüfen, als manuell alle referenzierten Klassen herauszufinden und die Regelpräsenz für alle zu überprüfen. –
Ist das eine Android-Frage? –