运行时:
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中。谢谢
您可以添加删除文件的目标作为发布命令的最后一行,但是,我认为您不会像大多数Android开发人员那样创建自己的发布目标。然后,另一种选择是将您的目标暴露为<target name="remove-files">
,并像ant release,remove-files
一样运行ant发布。
然而,我只是想知道为什么这些文件是一个bug负担?
也许有点晚了,但有比公认答案更容易的解决方案(不确定在提出问题时是否有效)。删除任务有deleteonexit
属性:
指示如果失败,是否使用文件#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>
而另一种方法(xml)也可以。我只是想分享我们的方法。我们使用的是Windows,我们有一个名为build.bat的批处理文件。批处理文件完成调用ant building等命令后我们在大楼的最后一行有这个。bat
SET "APK_TMP3=%DIR_APP%platformsandroidant-build%APP_PACKAGEID%.classes.dex"
IF EXIST "%APK_TMP3%" (
del "%APK_TMP3%"
)
我们删除的文件是*-unaligned.apk、unsigned.apk、classes.dex、.ap_files