【问题标题】:Building Android test project with Jenkins fails due to subant error由于 subant 错误,使用 Jenkins 构建 Android 测试项目失败
【发布时间】:2013-07-11 12:30:28
【问题描述】:

当我尝试在 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。请参阅 subant (http://ant.apache.org/manual/Tasks/subant.html) 的 Apache Ant 规范,这可能是失败的根源?!

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

你们中有人遇到过类似的问题吗?任何想法如何解决它?

提前感谢您的帮助。

【问题讨论】:

    标签: android ant jenkins


    【解决方案1】:

    “据报道,该问题实际上应该已经解决,但我仍然面临所描述的问题。”

    您提到的问题 (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中删除tested.project.dir

    2. 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 目标,则需要更改它。

    【讨论】:

    • 首先非常感谢您的回答!由于针对该问题的成熟解决方案非常罕见,似乎世界上没有其他人正在使用 Android 的自动化测试(通过本机检测框架)。你的测试策略如何@dnozay?对我来说,很难想象没有人愿意为每晚构建运行自动化测试,不使用 CI,不进行回归测试......我在 GitHub 上的几个开源项目中看到的是,它们是使用 RoboElectric 进行测试。但据我了解,它更多的是用于单元测试而不是验收测试。 :-(
    • @andd,我不是 android 开发人员,我是因为 [jenkins] 标签才来到这里的,并试图为您查找信息。有jenkinsci-usersandroid-developers google 群组;我也建议在那里发帖。
    • 不幸的是,解决方法不起作用。我仍然无法自动化我们的测试。当我删除tested.project.dir时,替换“run-tests”目标中的包名称并通过命令行使用指定的目标运行ant,构建失败,因为无法找到被测项目,这是某种方式需要的“调试”目标。
    【解决方案2】:

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

    我一直想知道为什么我能够在我的机器上本地构建它,但不能使用 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
    

    终于成功了。

    (当然,将特定路径信息检查到存储库中通常不是好的做法。但最终它正在工作......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2020-01-16
      • 2020-03-11
      相关资源
      最近更新 更多