java - 使用 ant 任务时 Proguard 中的 injar 参数出现问题

标签 java ant obfuscation proguard

我正在使用 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/

相关文章:

mysql - 无法访问 Sonar MySQL 数据库由 : java. sql.SQLException 引起:用户 'sonar' @'glassfishdev.ccs.local' 的访问被拒绝(使用密码:YES)

android - 如何混淆 Android 推送通知的 GCM key

java - 自动重构源java代码而不是jar

java - Ant 到 Gradle,javaCompile 任务的问题

java - 如何在 Ant 中运行所有 JUnit 测试并在失败时停止?

obfuscation - 有没有办法避免让我的混淆应用程序看起来像病毒

java - 在 Java 中处理法语字符

java - 如何显示 swt 文本框的悬停文本

java - HTMLPanel 可以在 uiBinder 中使用,即使它没有无参数构造函数。怎么会?

java - 从父抽象类调用方法