2013-02-12 98 views
0

在我的Android應用程序中,我使用很多開放源代碼的JAVA庫作爲源代碼。它使應用程序非常龐大。Java(Android):查找未使用的類

classes附近的人數6000+。我想從中刪除unused classes。任何人都知道如何去做。我找到很多工具,但是這是爲了刪除未使用的代碼。提前致謝。

+1

使用[ProGuard](http://proguard.sourceforge.net)。 – 2013-02-12 06:26:05

+0

重要的是我想使用ProGuard,但無法用它構建。由於巨大的應用程序大小以及許多類,因此嘗試使用ProGuard進行構建時,我得到的GC開銷限制超出了Java堆空間錯誤。 – Guna 2013-02-12 06:30:41

+0

我懷疑你的應用程序太大了,你可能在java上有一個很小的堆空間。嘗試增加允許的最大空間。您還可以將其增加到超出計算機上實際使用的範圍,並且在大多數操作系統中它將使用虛擬內存。 – 2013-02-12 06:40:51

回答

-4

6000類?????那麼這就是爲什麼人們花2000美元買一個編譯器來刪除未使用的代碼。如果你把你的代碼放在eclipse中,它會在庫下面放一個黃線,並且你根本沒有使用這個變量。

希望這會有所幫助。

+0

感謝您的回答。但我想刪除完全沒有任何引用,並沒有在我的Android應用程序中使用的類。那可能嗎? – Guna 2013-02-12 06:27:16

2

使用Proguard。它去掉未使用的類和庫。鏈接:http://developer.android.com/tools/help/proguard.html

編輯: 超過的gc開銷限制不是因爲您使用的是proguard。這是因爲允許使用的內存很低。您可以通過增加允許的內存限制來解決此問題(http://docs.oseems.com/general/application/eclipse/fix-gc-overhead-limit-exceeded)。做到這一點,運行proguard,你的應用程序的大小將是最小的。

+0

請看我對Louis Wasserman的評論。我無法使用ProGuard。沒有Proguard,我的應用程序正在構建。使用ProGuard時,我不能。 – Guna 2013-02-12 06:33:01

0

那麼,如果你使用的是開源的Java庫,你應該先找出許可下分發這些庫。某些許可證不允許您重新分配可分發的資源,其他許可證只允許您在創建新軟件開放源代碼(包括您的代碼)時重新打包。 http://opensource.org/licenses

所以在你檢查了liceneces並且或者聯繫了權利人之後。

您可以通過所有第三方代碼編寫一個遵循依賴關係樹的工具,並生成不在該樹中的類的列表。我想大多數IDE不會做你想做的事情,因爲他們會考慮使用或不使用庫。

+0

謝謝亞歷克斯。大多數情況下,我只使用源類,而不是jar。有關如何讀取類的依賴關係的任何想法?因爲我只使用開放源代碼的一小部分功能。例如,我在我的應用程序中使用IText,但其用於的功能僅用於合併PDF(不包括PDF創建和PDF編輯)。 – Guna 2013-02-12 06:35:30

+0

你可以提取它們只有拉鍊的罐子,你可以在相關的包中找到你需要的類文件。如果你在編輯器中打開類文件,你會看到所有的導入語句已經被解析到對象中,你需要以確保所有這些對象也包括在內。我想你會驚訝你需要多少代碼。我認爲你最大的努力就是讓progruard像其他人所建議的那樣工作。 – 2013-02-12 17:58:08

0

proguard做這行的Java。 從我看到它已經是android堆棧的一部分 - http://developer.android.com/tools/help/proguard.html

看看鏈接,並試圖找出它爲什麼不適合你(可能你沒有創建一個發佈版本)。 如果它正在工作,並且您仍然有一個巨大的文件,那麼您可能正在使用使用大量文件的庫,並且您可以做的事情不多。