我不認爲你只能做到這一點與proguard的,我真懷疑有一個簡單的解決方案(插件,您可以使用)與MVN \ gradle這個\ SBT \不管這個。
如果您在構建過程中運行代碼或shell命令時可以使用,我可以推薦一些構建塊,但由於將它們放在一起真的取決於您如何構建項目,因此我只能提供關於如何粘合它們的基本建議一起。
的總體思路是:
(1)使用jdeps(的一部分,並與JDK分佈)來從利益編譯.class
文件的依賴關係(包括傳遞)。
在你的情況下,輸出的some.class
遞歸的依賴關係(僅限於root_package
)應該是這樣的:
jdeps -v -R -e "root_package.*" some.class
(2)搶jdeps
輸出,並將其轉化爲ProGuard配置文件(類列表-keep
) 。 (3)
(3)在你的main proguard配置文件中,你在(2)中生成的配置文件爲include。
步驟(2)需要大多數工作並且可以以不同方式接近。
我的建議是使用任何腳本功能構建系統具有運行jdeps
,做輸出的轉變。
Maven的,例如,具有生成過程中plugin that allows groovy scripts to be executed。
如果您更舒適的運行shell腳本,你可以做到以下幾點:
管jdeps
輸出成類似:
grep -Po classname_regex
...只保留類名你想保留(可以使用零長度斷言建立classname_regex
)。
的grep
管道輸出到類似:
awk '{print "-keep class " $0}
...讓ProGuard配置文件,並保存輸出到文件。
你能解釋爲什麼你需要這樣一個'漂亮的技巧'嗎?你的用例是什麼? – larsgrefer
@larsgrefer當然,我正在創建一個工具來驗證我需要保留在proguard中的類有正確的proguard規則。對於我來說,驗證類「A」的單個規則的存在比手動找出所有引用的類並驗證所有類的規則存在更容易。 –
這是一個android問題嗎? –