2012-10-30 61 views
4

我有一個滿是罐子(felix包)的目錄。我想遍歷所有這些jar並創建dex'd版本。我的意圖是將這些dex'd罐中的每一個都部署爲獨立apk,因爲它們是捆綁在一起的。如果我從錯誤的方向接近這一點,請隨時將我理清。使用Ant我如何定義一個罐子目錄?

第一部分只是嘗試爲每個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> 

回答

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允許你遍歷文件集而不需要螞蟻的contrib(特別是網頁,其外觀爲*的例子。 c在一個目錄中,編譯它們,並將它們重命名爲* .o在一個應該直接適用的指定目錄中)。不幸的是,它看起來會失去回聲消息提供的可追溯性。

爲了記錄,我相信這個錯誤信息實際上是由dx.bat不是直接生成的,但我不確定,我不知道爲什麼。

希望有所幫助。

+0

太棒了。謝謝。 – cbeaudin

+0

我使用ant導出了資源文件夾中的資源jar。現在我希望這些資源成爲.dex的一部分。任何想法如何實現這個? – AndroidGuy

0

看到"Ant apply task"的文件,它說:「至少一個文件集或文件列表需要

所以,此行「未指定的資源」被打印到通知û是寫一些文件集或文件列表.....

改爲使用「exec」。

相關問題