使用Ant我怎么能dex一个jar目录?

时间:2012-10-30 14:50:06

标签: android ant

我有一个装满了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>

2 个答案:

答案 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)

请参阅"Ant apply task"的文档,其中说:“至少需要一个文件集或文件列表

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

改为使用“exec”。