緊湊的罐子,我們這是在JAR清單中定義一些入門的主要方法,和一堆依賴。創建沒有給出一個普通的Java項目的Gradle依賴
現在通常當我們創建一個分佈,我們可以使用應用程序的插件,並且有一定的結構類似這樣的輸出
/bin (some splatform specific scripts that point to our jar)
/lib (our jar + all dependencies with their dependencies etc...)
問題是,即使我們使用了只有幾類,從我們的直接依賴關係,他們和所有的傳遞依賴將最終分佈。例如,從100M的發行版中,只有1M是實際可能運行的代碼,可能與我們的應用程序有任何關係...
像proguard這樣的工具可以將代碼收縮到特定的jar中進行各種優化,但不會在意if該代碼未被使用。通過未使用我的意思是主要方法是jar的入口點,並根據主要的代碼它可能永遠不會使用實際應用程序jar中的大部分代碼和更多的庫罐中...
我們的目標是創建一個具有唯一的代碼,它實際上會使用這個1M罐子,考慮到是什麼在JAR清單的主要方法...
我搜索了很多,但找不到任何解決方案對此,proguard非常接近,但我找不到任何方式使它只關心代碼的特定流程而不是所有的代碼。
是否有可以做這件事的任何工具?
只是一個側面說明:請記住,有一個)反射......使得它很難確定哪些類是真的* *需要...然後b)在轉換爲停機問題:對於任意程序和輸入,您可以**不**確定是否曾經使用某個函數(又名類)。所以,我說的是:也許你的問題有實用的答案,但是大的理論是不利於你的。 – GhostCat
SO關閉主題。 – ManoDestra
@Jägermeister通常,如果一個圖書館依賴於反思,你會發現它並明確告訴proguard不要刪除這個或那個類......在我的情況下,我根本不使用它...關於b)這是怎麼回事?如果proguard已經這樣做了,它會通過字節碼,並且如果它檢測到死代碼,它將刪除它或任何未使用的類...所以proguard做我想要的它只是它不關心入口點... – vach