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

Java(Android):查找未使用的类,java,android,removeclass,Java,Android,Removeclass,在我的Android应用程序中,我使用了很多开源JAVA库作为源代码。它使应用程序在规模上非常庞大 即将到来的类的数量6000+。我想从中删除未使用的类。任何人都知道怎么做。我发现了很多工具,但那是用来删除未使用的代码的。提前感谢。6000节课?????这就是为什么人们要花2000英镑买一个编译器来删除未使用的代码。如果您将代码放在eclipse中,它将在库和根本不使用的变量下放置一条黄线 希望这有帮助。使用Proguard。它去除了未使用的类和库。链接: 编辑: 超出gc开销限制不是因为您正在

在我的Android应用程序中,我使用了很多开源JAVA库作为源代码。它使应用程序在规模上非常庞大


即将到来的
类的数量6000+。我想从中删除
未使用的类
。任何人都知道怎么做。我发现了很多工具,但那是用来删除未使用的代码的。提前感谢。

6000节课?????这就是为什么人们要花2000英镑买一个编译器来删除未使用的代码。如果您将代码放在eclipse中,它将在库和根本不使用的变量下放置一条黄线


希望这有帮助。

使用Proguard。它去除了未使用的类和库。链接:

编辑:
超出gc开销限制不是因为您正在使用proguard。这是因为eclipse允许使用的内存很低。您可以通过增加允许的内存限制()来解决此问题。这样做,运行proguard,您的应用程序大小将是最小的。

如果您使用的是开源java库,您应该首先了解这些库是根据什么许可证分发的。某些许可证不允许您重新打包可分发内容,其他许可证仅允许您在使新软件开源(包括您的代码)的情况下重新打包

因此,在您检查许可证和/或联系权利持有人之后

您可以编写一个工具,从类到所有第三方代码都遵循依赖关系树,并生成不在该树中的类列表。我想大多数IDE不会做你想做的事情,因为他们会考虑使用或不使用一个库。 为java执行此操作。 据我所见,它已经是android堆栈的一部分了

查看该链接并尝试找出它不适合您的原因(可能您没有创建发布版本)。 如果它工作正常,并且您仍然拥有一个巨大的文件,那么您可能正在使用使用大量文件的库,对此您无能为力。

步骤1

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

-printusage
添加到proguard.pro文件运行

/gradlew应用程序:带proguard的minifyrelease
/gradlew应用程序:带r8的minifyrelease

步骤2

查找usage.txt中但不在mapping.txt中的类名记录,这些记录是Proguard/R8删除的未使用的类

<> P>编写这样的算法并不难,但是可以用java集合数据结构< /P>考虑我的方法
更多细节

使用。主要是我想使用ProGuard,但无法使用它进行构建。由于巨大的应用程序大小和太多的类,我在尝试使用ProGuard构建时超出了GC开销限制,并且出现Java堆空间错误。我怀疑您的应用程序太大,您可能在Java上的堆空间太小。尝试增加允许的最大空间。您还可以将其增加到超出您计算机上实际拥有的容量,并且在大多数操作系统中,它将使用虚拟内存。您可以获得一些关于您需要什么DEP以及您的应用程序有多大的统计数据吗?(我正在尝试与ProGuard一起解决这些问题。)谢谢您的回答。但是我想完全删除那些在我的Android应用程序中没有任何引用和用途的类。这可能吗?请看我上面对路易斯·沃瑟曼的评论。我不能使用ProGuard。如果没有Proguard,我的应用程序将无法构建。当使用ProGuard时,我不能。谢谢Alex。大多数情况下,我只使用源代码类,而不是jar。知道如何读取类的依赖关系吗?因为我只使用了开源的一小部分功能。例如,我在我的应用程序中使用IText,但它所使用的功能只是合并PDF(既不是PDF创建也不是PDF编辑)。你可以提取JAR它们只是拉链,你可以在相关软件包中找到你需要的类文件,如果在编辑器中打开类文件,您将看到所有导入语句都已解析为对象,您需要确保也包含所有这些对象。我想你会惊讶于你需要多少代码。我认为你的努力的最佳用途是让程序按照别人的建议工作。