例如,我希望每个输出 jar 都包含其上方的两个 injar:
# Windows Client
-injars common.jar
-injars windowsClient.jar
-outjar windowsClient.jar
# Mac Client
-injars common.jar
-injars macClient.jar
-outjar macClient.jar
# Windows Server
-injars common.jar
-injars windowsServer.jar
-outjar windowsServer.jar
# Mac Server
-injars common.jar
-injars macServer.jar
-outjar macServer.jar
所以这有效,并且只包含每个 jar 的特定代码。问题是我还收到来自 proguard 的大量“程序类定义重复”警告。我认为这是因为重复的 -injars common.jar
,但我不知道如何解决这个问题。如果我从每个分组中删除 -injars common.jar
,则会收到有关必须使用过滤器的错误。
有没有办法例如说:
# Windows Server (3 step)
-removeJars macClient.jar
-injars ...
-outjars windowsServer.jar
最佳答案
ProGuard 的目的是忽略重复的输入类(除了打印注释之外)并将每个已处理的类写入单个 jar。您可以为 commons.jar 创建一个单独的输出 jar,然后将其合并到其他 jar 中。
你的技巧恰好奏效了,因为多次读取同一个 commons.jar 的效率有些低下。您可以使用 -dontnote
抑制警告。
注释:
- 输入 jar 和输出 jar 的名称必须不同。
- 您可能需要禁用类合并(
-optimizations !class/merging/*
),以防止类在 jar 之间迁移。
关于java - Proguard - 如何使用共享输入 jar 创建多个输出 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743391/