其實我最近想出瞭解決這個問題的方法。基本思想是,我的ANT文件找到所有庫項目,首先構建它們,然後使用nodeps
目標構建剩餘的項目。這有效地防止了CoreLibrary不斷重新編譯的情況。如果我寫的居然發現庫相關訂單,所以我可以建立一個與nodeps目標庫任務
<?xml version="1.0" encoding="UTF-8"?>
<project name="MasterBuild">
<!-- A property for the name of the file that contains 'android.library=true' (which is how we find library projects) -->
<property name="library.setting.file.name" value="project.properties" />
<filelist id="normal-projects" dir=".">
<!-- You want to add your own projects here -->
<file name="./MyProject/build.xml" />
<file name="./MyProject2/build.xml" />
<file name="./MyProject3/build.xml" />
</filelist>
<fileset id="all-libraries-properties" dir=".">
<include name="*/${library.setting.file.name}" />
<contains casesensitive="true" text="android.library=true" />
</fileset>
<pathconvert property="all-libraries" refid="all-libraries-properties">
<globmapper from="*${library.setting.file.name}" to="*build.xml" />
</pathconvert>
<target name="-set-debug-mode">
<property name="build.target" value="debug" />
<property name="install.target" value="installd" />
</target>
<target name="-set-release-mode">
<property name="build.target" value="release" />
<property name="install.target" value="installr" />
</target>
<target name="-build-dependencies" unless="built.dependencies">
<property name="built.dependencies" value="true" />
<subant buildpath="${all-libraries}" target="${build.target}" inheritall="false" />
</target>
<target name="-build-normal-projects" depends="-build-dependencies">
<subant inheritall="false">
<target name="nodeps" />
<target name="${build.target}" />
<resources refid="normal-projects" />
</subant>
</target>
<target name="-install-normal-projects">
<subant inheritall="false">
<target name="${install.target}" />
<resources refid="normal-projects" />
</subant>
</target>
<target name="debug" depends="-set-debug-mode, -build-normal-projects" description="Builds (only) a debug-key signed application" />
<target name="release" depends="-set-release-mode, -build-normal-projects" description="Builds (only) a release-key signed application" />
<target name="installd" depends="-set-debug-mode, -install-normal-projects" description="Installs (only) a debug-key signed application" />
<target name="installr" depends="-set-release-mode, -install-normal-projects" description="Installs (only) a release-key signed application" />
</project>
注意該解決方案可以改善。此外,可能有一種方法可以自動檢測「正常項目」,但我還沒有需要。最後,我從我正常的ANT文件中展開了很多東西,以便將它帶入此處,希望我沒有錯過任何東西。但是,這個概念是存在的。
現在,我不這麼認爲。下一個主要工具版本可能支持將庫項目作爲JAR進行分發。在這種情況下,您可以讓Ant腳本構建庫項目,並讓其他項目直接引用JAR,而不是庫項目。至少在理論上。 – CommonsWare 2012-01-11 00:15:27
謝謝。我曾希望新的構建過程可以防止重複建立圖書館在某種程度上可以幫助您。換句話說,我知道如果我有Lib A和Lib B引用Lib C,那麼當構建一個引用Lib A和B的項目時,Lib C將只會建立一次。我希望如果我能夠找到一種方法來利用這個問題。 – 2012-01-11 16:11:55
@CommonsWare我更新了一個你可能想看的答案。據我可以告訴它應該工作正常,但我不知道什麼時候'nodeps'目標被添加到SDK。 – 2012-04-19 17:22:52