我正在使用 ant(版本 5.0 beta 2)的 proguard,当我尝试使用过滤器(!META-INF/MANIFEST-MF)添加输入 jar(又名 injar)时,参数将转换为:
-injars '/path-to-my-file/myjar.jar(!META-INF/MANIFEST-MF)'
而不是
-injars /path-to-my-file/myjar.jar(!META-INF/MANIFEST-MF)
因此过滤器 (!META-INF/MANIFEST-MF)
被忽略,并在尝试读取文件“/path-to-my-file/myjar.jar(! META-INF/MANIFEST-MF)"
我的 build.xml 类似于:
<pathconvert property="other_injars" refid="injars">
<mapper>
<globmapper from="*.jar" to="*.jar(!META-INF/MANIFEST.MF)" casesensitive="no"/>
</mapper>
</pathconvert>
<!-- obfuscate and optimize by ProGuard -->
<taskdef resource="proguard/ant/task.properties" classpath="${proguard.home}/lib/proguard.jar" />
<proguard configuration="${proguard.config.file}" >
<injar refid="main_injar"/>
<injar path="${other_injars}"/>
<outjar path="${workdir}/${output.jar.file}"/>
<libraryjar refid="third_parties" />
</proguard>
我的问题是,当我使用过滤器时,如何避免生成的 injar
参数值中的 '
字符?
我认为 proguard ant 任务由于以下字符而转义文件路径:(
或 !
,但它不应该,因为实际上,它们不是一部分文件路径。
最佳答案
在 ProGuard 风格的配置中,过滤器在文件名后面的括号之间指定:
-injars application.jar(!META-INF/MANIFEST.MF)
在 Ant 配置中,文件名和过滤器是用单独的属性指定的:
<injar path="application.jar" filter="!META-INF/MANIFEST.MF" />
因此在这种情况下,您不应将带有括号的过滤器附加到文件名中。
关于java - 使用 ant 任务时 Proguard 中的 injar 参数出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677118/