4

我有一个装满罐子(felix 包)的目录。我想遍历所有这些 jar 并创建 dex 版本。我的意图是将这些 dex'd jar 中的每一个部署为独立的 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>
4

2 回答 2

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 任务允许您在不需要 ant-contrib 的情况下迭代文件集(特别是该页面有一个示例,它在目录中查找 *.c,编译它们,并将它们重命名为 *.o 在应直接适用的指定目录)。不幸的是,看起来您将失去回声消息提供的可追溯性。

作为记录,我相信错误消息实际上是由dx.bat而不是ant直接生成的,但我不确定,也不知道为什么。

希望有帮助。

于 2012-10-31T04:27:02.467 回答
0

“Ant apply task”的文档,上面写着:“<strong>至少需要一个fileset或者filelist”</p>

所以,这行“没有指定资源”被打印出来通知你写一些文件集或文件列表.....

改用“执行”。

于 2013-09-01T10:47:28.807 回答