[英]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.