2011-11-15 3 views
3

Я на самом деле есть два взаимосвязанных вопроса:ProGuard, как муравей задачи

  1. Может предопределенные константы быть разложена в декларациях задач как <injar file="${build}/myjar.jar" />?
  2. Как я могу повторно использовать определение класса в proguard? То, что я пытаюсь достичь, - не указать весь набор требуемых библиотек. Их довольно много, и они уже включены в путь класса ant с определенным идентификатором.

Большое спасибо.

Martin

ответ

5

Конечно, вы можете использовать переменные 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. Первый пример на связанной странице должен быть тем, что вам нужно.

Update: Как получить кавычки вокруг записей пути был дан ответ здесь: How to properly quote a path in an ant task?

+0

Спасибо за ответ. Ваша помощь приветствуется. –

+0

PathConvert не добавляет кавычки вокруг имен файлов с пробелами, как ожидается от ProGuard (по крайней мере, до версии 4.6), поэтому регулярные элементы XML могут быть более безопасными для спецификаций пути. Другие варианты действительно более компактны и читаемы во встроенном стиле ProGuard. –

+0

Я добавил ссылку в свой ответ на вопрос, описывающий решение проблемы с цитатой. – Robert

1

Чтобы ответить на ваш первый вопрос, да. Расширение таких переменных, как в файле сборки, является особенностью Ant. Он будет работать с любыми задачами, которые вы используете.

Смежные вопросы