2013-07-11 57 views
4

當我嘗試建立在詹金斯一個Android測試項目中,我收到以下錯誤信息:與詹金斯大廈的Android測試項目失敗,因爲subant錯誤

BUILD FAILED 
C:\Progra~1\android-sdk\tools\ant\build.xml:444: The 
    following error occurred while executing this line: 
C:\Progra~1\android-sdk\tools\ant\build.xml:444: subant task calling 
    its own parent target. 

這似乎在某種程度上是一個已知的問題(https://code.google.com/p/android/issues/detail?id=21108https://wiki.jenkins-ci.org/pages/viewpage.action?pageId=58917193)。據報道,這個問題實際上應該是固定的,但我仍然面臨着所描述的問題。

我在Windows Server上運行詹金斯,安裝了最新的Android工具(SDK工具v22.0.1,平臺和構建工具V17)和利用螞蟻1.9.0 ..

這個項目的結構:

  • 項目A
  • 測試項目爲項目A

我創建了一個詹金斯構建dedicted工作對他們倆的。兩個項目的build.xml文件都是使用「android update」命令創建的(如Android規範中所述)。所以他們都是從android-sdk/tools/ant文件夾中引用build.xml。參考subant(http://ant.apache.org/manual/Tasks/subant.html)的Apache Ant規範,這可能是失敗的根源?!

如果該任務調用相同的 構建文件,則該任務不得在目標之外使用。

有沒有人遇到過類似的問題?任何想法如何解決它?

在此先感謝您的幫助。

回答

1

經過幾個小時的調查,我終於找到了解決方法!

我一直想知道爲什麼我能夠在我的機器上本地創建它,但不能與Jenkins甚至不在Jenkins運行的遠程服務器上的命令行中使用ANT。 。 因此,不是用...

ant -Dsdk.dir=<YOUR SDK DIR> -Dtested.project.dir=<PATH TO YOUR PROJECT UNDER TEST> clean debug install test 

執行ANT ...

我設定的ant.properties內tested.project.dir屬性文件,以正確的路徑在服務器上,並在此檢查到源代碼庫。然後我從Jenkins的ANT參數列表中刪除了這個屬性,這樣詹金斯現在只執行

ant -Dsdk.dir=<YOUR SDK DIR> clean debug install test 

最後它起作用。

(當然,這是genarally沒有很好的做法,檢查的具體路徑信息到倉庫。但最後它的工作...)所有的

2

「據報道,這個問題實際上應該是固定的,但我仍然面臨所描述的問題。」

您提到的問題(issue 21108: Testing library project broken with SDK Tools r14)不是固定的。 這與issue 21304: "ant debug installt" should work for test projects.類似,其中不是被修復。

這裏是the workaround from Joe Bowbeer

  1. ant.properties

  2. 刪除tested.project.dir添加run-tests目標build.xml

    <!-- SDK Tools r15 workaround --> 
    <property name="tested.manifest.package" value="com.example.test" /> 
    
    <target name="run-tests"> 
    <echo>Running tests...</echo> 
    <exec executable="${adb}" failonerror="true"> 
        <arg line="${adb.device.arg}" /> 
        <arg value="shell" /> 
        <arg value="am" /> 
        <arg value="instrument" /> 
        <arg value="-w" /> 
        <arg value="${tested.manifest.package}/${test.runner}" /> 
    </exec> 
    

  3. 使用命令行運行測試:

    $ ant debug install run-tests 
    

換句話說,如果你使用一個單一的installt目標,你需要改變這種狀況。

+0

首先非常感謝您的回答!由於針對該問題的成熟解決方案非常罕見,因此世界上沒有其他人使用Android的自動化測試(通過本機工具框架)。你的測試策略@dnozay如何?對我來說,很難想象沒有人願意爲每個夜晚的構建運行自動化測試,不使用CI,不做迴歸測試......我在GitHub上的幾個開源項目中看到的是他們是使用RoboElectric進行測試。但從我的理解來看,單元測試更多的是驗收測試。 :-( – a11n

+0

@andd,我不是一個android開發人員,我因爲[jenkins]標籤而來到這裏,並試圖爲你查找信息。有'jenkinsci-users'和'android-developers'谷歌組;我 – dnozay

+0

不幸的是,這個解決方法不起作用,我仍然無法使我們的測試自動化,當我移除tested.project.dir時,在「run-tests」目標中替換軟件包名稱並運行ant通過命令行指定的目標構建失敗,因爲無法找到「調試」目標需要的測試項目。 – a11n