簡體   English   中英

Java(Android):查找未使用的類

[英]Java(Android): Find unused classes

在我的 Android 應用程序中,我使用了很多開源 JAVA 庫作為源代碼。 它使應用程序的規模非常龐大。

大約6000+classes數量。 我想從中刪除unused classes 任何人都知道如何做到這一點。 我找到了很多工具,但那是用於刪除未使用的代碼。 提前致謝。

使用混淆器。 它剝離了未使用的類和庫。 鏈接: http : //developer.android.com/tools/help/proguard.html

編輯:超出 gc 開銷限制不是因為您正在使用 proguard。 這是因為允許eclipse使用的內存很低。 您可以通過增加允許的內存限制來解決此問題( https://www.simplified.guide/eclipse/fix-gc-overhead-limit-exceeded )。 這樣做,運行 proguard,你的應用程序大小將是最小的。

好吧,如果您使用的是開源 Java 庫,您應該首先了解這些庫的分發許可。 某些許可證不允許您重新打包分發的其他許可證,如果您將新軟件開源(包括您的代碼),則僅允許您重新打包。 http://opensource.org/licenses

因此,在您檢查許可和/或聯系權利持有人之后。

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

proguard為 java 執行此操作。 從我所看到的它已經是 android 堆棧的一部分 - http://developer.android.com/tools/help/proguard.html

查看鏈接並嘗試找出它不適合您的原因(可能您沒有創建發布版本)。 如果它可以工作,並且您仍然有一個巨大的文件,那么您可能正在使用使用大量文件的庫,並且您對此無能為力。

第1步

使用 Proguard 或 R8 生成 usage.txt 和 mapping.txt

-printusage添加到您的 proguard.pro 文件運行

./gradlew app:minifyReleaseWithProguard./gradlew app:minifyReleaseWithR8

第2步

查找usage.txt中沒有mapping.txt中的類名記錄,這些是Proguard/R8刪除的未使用類

編寫這樣的算法並不難,但您可以考慮我使用 Java Set 數據結構的方法

更多細節在這里

6000 班???? 嗯,這就是為什么人們為刪除未使用代碼的編譯器支付 2000 美元的原因。 如果您將代碼放在 eclipse 中,它將在庫和您根本不使用的變量下放置一條黃線。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM