4

jar (felix バンドル) でいっぱいのディレクトリがあります。これらすべての jar を反復処理して、dex 化されたバージョンを作成したいと考えています。私の意図は、これらの dex'd jar のそれぞれがバンドルであるため、スタンドアロンの apk としてデプロイすることです。間違った方向からアプローチしている場合は、遠慮なく教えてください。

この最初の部分は、各 jar に対応する .dex ファイルを試して作成するだけです。ただし、これを実行すると、Ant から「リソースが指定されていません」というエラーが表示されます。

これは正しいアプローチですか、それともjarを入力してそのjarのdex'dバージョンを出力するためのより簡単なアプローチはありますか? ${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に変更する例があります。直接適用できる指定されたディレクトリ)。残念ながら、エコーメッセージによって提供されるトレーサビリティが失われるようです。

ちなみに、エラーメッセージは実際には直接antではなくdx.batによって生成されていると思いますが、確信が持てず、理由もわかりません。

お役に立てば幸いです。

于 2012-10-31T04:27:02.467 に答える