由于次要错误,使用Jenkins构建Android测试项目失败

时间:2013-07-11 12:30:29

标签: android ant jenkins

当我尝试在Jenkins上构建Android测试项目时,我收到以下错误消息:

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上运行Jenkins,安装了最新的Android工具(SDK工具v22.0.1,平台和构建工具v17)并使用Ant 1.9.0 ..

项目结构是:

  • 项目A
  • 项目A的测试项目

我在Jenkins上为这两个人创建了一个专门的构建作业。两个项目的build.xml文件都是使用“android update”命令创建的(如Android规范中所述)。所以他们都引用了android-sdk / tools / ant文件夹中的build.xml。参考Apache Ant规范中的subant(http://ant.apache.org/manual/Tasks/subant.html)这可能是失败的根源?!

  

如果调用相同的任务,则不得在目标之外使用此任务   构建文件是它的一部分。

你们有没有遇到过类似的问题?任何想法如何解决?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分: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. tested.project.dir

  2. 中移除ant.properties
  3. 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>
    

  4. 使用命令行运行测试:

    $ ant debug install run-tests
    
  5. 换句话说,如果您使用一个installt目标,则需要更改它。

答案 1 :(得分:1)

经过几个小时的调查后,我终于找到了解决方法!

我一直想知道为什么我能够在我的机器上本地构建它,但不能使用Jenkins,甚至不能在Jenkins运行的远程服务器上使用命令行中的ANT。 。 所以不要用......执行ANT。

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

...

我将ant.properties文件中的tested.project.dir属性设置为服务器上的正确路径,并将其检入源代码存储库。然后我从Jenkins的ANT参数列表中删除了该属性,以便Jenkins现在只执行

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

最后它有效。

(当然,检查存储库中的特定路径信息绝对不是一种好的做法。但最后它正在工作......)