Вставка цели сборки только с использованием build.xml?

У меня есть build.xml, который может компилироваться и оптимизироваться, если я запускаю цели сборки по отдельности - "ant compile", за которым следует "and optimize".

Проблема в том, что я хочу запустить «ant release», который обычно делал бы все необходимое для создания двоичного файла выпуска, но мне нужно вставить цель сборки в цепочку - цель называется «optimize», и она запускает proguard optimize / shrinker по отношению к файлам классов непосредственно перед тем, как этап «dex» построит байтовый код.

Файл шаблона /opt/android-sdk-linux_x86/platforms/android-8/templates/android_rules.xml содержит следующее правило, которое я мог бы изменить так, чтобы он сказал: "depends =" compile, optimize "" Но я не хочу необходимо повторно изменять файл для каждого выходящего SDK (каждый раз с новым файлом android_rules.xml).

<!-- Converts this project's .class files into .dex files -->
<target name="-dex" depends="compile">
    <dex-helper />
</target>

Есть ли альтернатива изменению шаблона xml и вместо этого помещению всех правил компиляции в build.xml?


person Brad Hein    schedule 07.03.2011    source источник


Ответы (2)


Почему бы не использовать обработчик пост-компиляции в файле шаблона build.xml? Он гласит:

[This is typically used for code obfuscation.
 Compiled code location: ${out.classes.absolute.dir}
 If this is not done in place, override ${out.dex.input.absolute.dir}]
<target name="-post-compile">
</target>

Учитывая, что он явно запрашивает модификацию, я думаю, что он будет поддерживаться во всех версиях sdk.

Чтобы увидеть полный автоматически сгенерированный build.xml файл для вашего проекта, вам может потребоваться запустить android update project.

person Matthew Willis    schedule 07.03.2011
comment
О, чувак, это прекрасно. Даже не осознавал, что это было там. Спасибо! - проверено - работает! Я просто добавил зависимость к этому атрибуту моего build.xml: ‹target name = -post-compile depends = optimize› ‹/target› - person Brad Hein; 07.03.2011

На всякий случай пропустили:

Начиная с SDK Tools Rev 8, поддержка Proguard встроена. Вам просто нужно добавить строку

proguard.config=proguard.cfg

в ваш default.properties (и, конечно, у вас есть файл proguard.cfg, в котором вы настраиваете свои правила обфускации)

Никаких других целей добавлять не нужно.

(В любом случае это верно для версии для Windows, я полагаю, что то же самое и для Linux. XML-файл с правилами теперь называется main_rules.xml)

person NickT    schedule 07.03.2011
comment
Я попробовал, но Fedora 14 все еще поддерживает ant 1.7 (а не 1.8, требуемый новым SDK). Увы, мне придется подождать, пока они наверстают упущенное, но я с нетерпением жду возможности использовать этот гораздо более простой метод. Спасибо, NickT. - person Brad Hein; 08.03.2011