我有一个装满了jars(felix包)的目录。我想迭代所有这些罐子并创建dex版本。我的意图是将这些dex&#d; dars中的每一个都作为独立的apk部署,因为它们是捆绑包。如果我从错误的方向接近这个,请随意把我拉直。
第一部分是尝试为每个jar创建一个相应的.dex文件。但是当我运行这个时,我得到了一个"没有指定资源"来自Ant的错误。
这是正确的方法,还是有一种更简单的方法来输入jar并输出该jar的dex版本? $ {file}有效,因为它在echo命令中吐出文件的名称。
<target name="dexBundles" description="Run dex on all the bundles">
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/libs/ant-contrib.jar" />
<echo>Starting</echo>
<for param="file">
<path>
<fileset dir="${pre.dex.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<sequential>
<echo message="@{file}" />
<echo>Converting jar file @{file} into ${post.dex.dir}/@{file}.class...</echo>
<apply executable="${dx}" failonerror="true" parallel="true" verbose="true">
<arg value="--dex" />
<arg value="--output=${post.dex.dir}/${file}.dex" />
<arg path="@{file}" />
</apply>
</sequential>
</for>
<echo>Finished</echo>
</target>
答案 0 :(得分:3)
放手一搏:
<target name="dexBundles" description="Run dex on all the bundles">
<apply executable="${exec.dx}" dest="${post.dex.dir}/" parallel="false">
<arg value="--dex"/>
<arg value="--output="/>
<targetfile/>
<srcfile/>
<fileset dir="${pre.dex.dir}" includes="**/*.jar"/>
<mapper type="glob" from="*.jar" to="*.dex"/>
</apply>
</target>
看起来ant apply task允许你迭代文件集而不需要ant-contrib(特别是该页面有一个在目录中查找* .c,编译它们并将它们重命名为* .o在指定的目录中,应该直接适用)。不幸的是,您似乎会失去回显消息提供的可追溯性。
为了记录,我相信错误消息实际上是由dx.bat直接生成的,但我不确定,我不知道为什么。
希望有所帮助。
答案 1 :(得分:0)