2013-02-12 30 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

看看链接,并试图找出它为什么不适合你(可能你没有创建一个发布版本)。 如果它正在工作,并且您仍然有一个巨大的文件,那么您可能正在使用使用大量文件的库,并且您可以做的事情不多。