在我的 Android 应用程序中,我使用许多开源 JAVA 库作为源代码。它使应用程序的大小非常庞大。
数量classes
约为6000+。我想从中删除unused classes
。任何人都知道如何做到这一点。我找到了很多工具,但那是用于删除未使用的代码。提前致谢。
在我的 Android 应用程序中,我使用许多开源 JAVA 库作为源代码。它使应用程序的大小非常庞大。
数量classes
约为6000+。我想从中删除unused classes
。任何人都知道如何做到这一点。我找到了很多工具,但那是用于删除未使用的代码。提前致谢。
使用 Proguard。它剥离了未使用的类和库。链接: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 中,它将在库和您根本不使用的变量下放置一条黄线。
希望这可以帮助。