1

在我的 Android 应用程序中,我使用许多开源 JAVA 库作为源代码。它使应用程序的大小非常庞大。

数量classes约为6000+。我想从中删除unused classes。任何人都知道如何做到这一点。我找到了很多工具,但那是用于删除未使用的代码。提前致谢。

4

5 回答 5

3

使用 Proguard。它剥离了未使用的类和库。链接:http: //developer.android.com/tools/help/proguard.html

编辑:超出 gc 开销限制不是因为您使用的是 proguard。这是因为eclipse允许使用的内存很低。您可以通过增加允许的内存限制 ( https://www.simplified.guide/eclipse/fix-gc-overhead-limit-exceeded ) 来解决此问题。执行此操作,运行 proguard,您的应用程序将最小化。

于 2013-02-12T06:29:35.053 回答
0

好吧,如果您使用的是开源 Java 库,您应该首先找出这些库的分发许可证。某些许可证不允许您重新打包可分发的内容,而其他许可证仅允许您将新软件开源(包括您的代码)重新打包。http://opensource.org/licenses

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

您可以编写一个工具,通过所有第三方代码从您的类中遵循依赖关系树,并生成不在该树中的类的列表。我想大多数 IDE 不会做你想做的事,因为他们会认为一个库要么被使用,要么不被使用。

于 2013-02-12T06:31:05.067 回答
0

proguard为 java 做这个。据我所见,它已经是 android 堆栈的一部分 - http://developer.android.com/tools/help/proguard.html

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

于 2013-02-12T06:35:57.290 回答
0

步骤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 数据结构的方法

更多细节在这里

于 2020-12-22T14:32:43.933 回答
-4

6000节课??????嗯,这就是为什么人们为删除未使用代码的编译器支付 2000 美元的原因。如果您将代码放在 Eclipse 中,它将在库和您根本不使用的变量下放置一条黄线。

希望这可以帮助。

于 2013-02-12T06:22:19.733 回答