因此,例如,我希望每个输出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之间迁移。