使用ant任务在Proguard中使用injar参数问题

时间:2014-07-10 12:54:21

标签: java ant obfuscation proguard

我正在使用来自ant(版本5.0 beta 2)的proguard,当我尝试使用filter(!META-INF / MANIFEST-MF)添加输入jar(AKA injars)时,参数将转换为:

-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任务是由于字符(!而逃避文件路径,但它不应该因为实际上它们不是文件路径的一部分。 / p>

1 个答案:

答案 0 :(得分:2)

在ProGuard样式配置中,在文件名后面的括号中指定过滤器:

-injars application.jar(!META-INF/MANIFEST.MF)

在Ant配置中,文件名和过滤器使用单独的attbute指定:

<injar path="application.jar" filter="!META-INF/MANIFEST.MF" />

因此,在这种情况下,不应将带括号的过滤器附加到文件名。