6

历史/上下文 我有一个项目[1],其中大小非常重要 - 最近我将东西移到共享库 [2] 并认为 proguard 会照顾并删除未使用的类,因为我有一个配置,它大大减小了大小,但是使用 lib 我遇到了神奇的 100kb 标记,因此我进行了调查:我肯定不使用的类在生成的 dex 文件中 - 甚至使用全名(不缩短为单字符) - 例如,我看到 SquareView 在dex 我绝不会在应用程序中使用。

问题 令人惊讶的是,我在 proguard 文档中发现了以下内容:

The library jars themselves always remain unchanged. 

我可以以某种方式告诉/欺骗 proguard (in) 来处理它们吗?我觉得这真的很奇怪,特别是因为我希望在库中可以删除的东西比在应用程序本身中要多。

[1] https://github.com/ligi/FAST [2] https://github.com/ligi/AndroidHelper

4

2 回答 2

8

Android SDK 中的 Eclipse/Ant/Gradle 构建过程会使用 选项自动指定您的代码(来自bin/classes)及其库(来自libs-injars。这意味着完整的应用程序被压缩、优化和混淆(在发布版本中,假设启用了 ProGuard)。

构建过程仅使用android.jar选项指定 Android 运行时-libraryjars。有必要处理代码,但它不应出现在已处理的 apk 中,因为它已经存在于设备上。

所以这一切都应该自动解决。如果您的配置proguard-project.txt包含类似-keep class org.mylibrary.** { *; }. 这种配置通常是考虑反射的保守解决方案。通过一些研究和实验,您通常可以改进配置并获得更好的结果。您可以弄清楚为什么使用该选项保留课程-whyareyoukeeping

于 2013-08-27T15:19:15.253 回答
3

我相信你必须使用-injars

-injars class_path 指定要处理的应用程序的输入 jars(或 wars、ears、zip 或目录)。这些 jar 中的类文件将被处理并写入输出 jar。默认情况下,将复制任何非类文件而不进行更改。请注意任何临时文件(例如由 IDE 创建的文件),尤其是当您直接从目录中读取输入文件时。可以过滤类路径中的条目,如过滤器部分所述。为了更好的可读性,可以使用多个 -injars 选项指定类路径条目。

来源: http: //proguard.sourceforge.net/index.html#manual/usage.html

于 2013-08-27T01:54:56.313 回答