Как удалить сгенерированные файлы при запуске «ant release» - PullRequest
2 голосов
/ 25 февраля 2012

При запуске:

ant release  

с моим проектом Android, я получаю тонну автоматически сгенерированных файлов.Например:

MyApp-release-unaligned.apk 
MyApp-release-unsigned.apk  
MyApp-release-unsigned.apk.d    
MyApp-release.apk       
MyApp.ap_           
MyApp.ap_.d
build.prop
classes
classes.dex
classes.dex.d
res

Я не хочу все эти файлы.В основном все, что мне нужно, это подписанный .apk.Поэтому я попытался:

<target name="-post-compile">
    <!-- Clean up files that we don't want -->
    <delete dir="{$out.dir}res"/>
    <delete dir="{$out.dir}classes"/>
    <delete file="{$out.dir}${app.name}-release-unaligned.apk"/>
    <delete file="{$out.dir}${app.name}-release-unsigned.apk"/>
    <delete file="{$out.dir}${app.name}-release-unsigned.apk.d"/>
    <delete file="{$out.dir}${app.name}.ap_"/>
    <delete file="{$out.dir}${app.name}.ap_d"/>
    <delete file="{$out.dir}build.prop"/>
    <delete file="{$out.dir}classes.dex"/>
    <delete file="{$out.dir}classes.dex.d"/>
</target>

Очевидно, эти файлы создаются после вызова -post-compile.Есть ли простой способ настроить build.xml для удаления всего, кроме подписанного apk?Мой выходной каталог направлен на сервер, и я бы хотел, чтобы все было просто, чтобы другие не извлекали неправильный файл.Если нет простого способа удалить эти файлы, я создам для этого сценарий на стороне сервера, но я бы предпочел сохранить все в build.xml, если это возможно.Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 февраля 2012

Вы можете добавить цель удаления файлов в качестве последней строки команды release, однако я предполагаю, что вы не создаете свою собственную цель выпуска, как большинство разработчиков Android. Тогда другой альтернативой будет выставить вашу цель как скажем <target name="remove-files"> и запустить выпуск муравья как ant release,remove-files.

Однако мне просто интересно, почему эти файлы являются таким бременем ошибки?

1 голос
/ 26 мая 2015

Хотя другой подход (xml) тоже подойдет. Я просто хотел поделиться нашим подходом. Мы используем Windows, и у нас есть командный файл с именем build.bat . После того, как пакетный файл закончил вызывать команды для ant building и т. Д. У нас есть это в наших последних строках build.bat

SET "APK_TMP3=%DIR_APP%\platforms\android\ant-build\%APP_PACKAGEID%.classes.dex"
IF EXIST "%APK_TMP3%" (
    del "%APK_TMP3%"
)

Файлы, которые мы удаляем: * -unaligned.apk, unsigned.apk, classes.dex, .ap_ files

1 голос
/ 27 марта 2015

Возможно, немного поздно, но есть более простое решение, чем принятый ответ (не уверен, был ли он действительным на момент, когда был задан вопрос). Есть deleteonexit атрибут для удаления задачи, которая:

Указывает, использовать ли File # deleteOnExit () в случае сбоя удалить файл, это заставляет jvm пытаться удалить файл, когда процесс jvm завершается. Начиная с Ant 1.6.2

Итак, в custom_rules.xml можно получить что-то подобное:

<target name="release" depends="clean, clean-out-release">
    <echo message="${basedir}"/>

    ...

    <!-- remove extra files from out project -->
    <delete deleteonexit="true">
        ...
        <!-- remove -unassigned, -unaligned files -->
        <fileset dir="./out" includes="*-unaligned.apk" />
        <fileset dir="./out" includes="*-unsigned.apk" />
    </delete>
</target>
...