proguard 作为蚂蚁任务

Posted

技术标签:

【中文标题】proguard 作为蚂蚁任务【英文标题】:proguard as ant task 【发布时间】:2011-12-29 07:57:16 【问题描述】:

我其实有两个相关的问题:

    可以在任务声明中将预定义的常量扩展为<injar file="$build/myjar.jar" />吗? 如何在 proguard 中重用类路径定义?我想要实现的不是指定整套必需的库。它们很多,并且已经包含在具有特定 ID 的 ant 类路径中。

非常感谢。

马丁

【问题讨论】:

【参考方案1】:

当然你可以使用 Ant 变量。但是从我的角度来看,将所有命令行选项写入 proguard 任务的主体会更容易:

<taskdef resource="proguard/ant/task.properties" classpath="lib/proguard.jar" />
<proguard>
    -libraryjars "$java.home/lib/rt.jar"
    -injars     "$jar.name"
    -outjars    build/temp.jar
    -keep class test.Main  public static void main(java.lang.String[]); 
    -dontwarn
    -dontoptimize 
    -dontobfuscate
</proguard>

要将已定义的类路径转换为可包含在 proguard 定义中的字符串,您可以使用 Ant 任务 PathConvert。链接页面上的第一个示例应该是您需要的。

更新:如何获取路径条目周围的引号已在此处得到解答:How to properly quote a path in an ant task?

【讨论】:

感谢您的回答。感谢您的帮助。 PathConvert 不会像 ProGuard 所期望的那样在带空格的文件名周围添加引号(至少到 4.6 版),因此常规 XML 元素对于路径规范可能更安全。其他选项在嵌入式 ProGuard 样式中确实更紧凑且更具可读性。 我在我的回答中添加了一个链接,该链接描述了报价问题的解决方案。【参考方案2】:

回答你的第一个问题,是的。像在构建文件中那样扩展变量是 Ant 的一个特性。它适用于您使用的任何任务。

【讨论】:

以上是关于proguard 作为蚂蚁任务的主要内容,如果未能解决你的问题,请参考以下文章

Android:proguard 不会混淆源代码

ProGuard Ant 任务的多个配置文件

使用 SBT,我怎样才能拥有两个具有不同设置的不同 proguard 任务?

Java Ant - 如何传递 ProGuard 任务参数并在配置文件中使用它们?

导出已签名、混淆的 Android 应用程序时,如何在 Eclipse 中设置 ProGuard?

Unity proguard:任务“:transformClassesAndResourcesWithProguardForRelease”执行失败