2

我目前正在开发适用于 iOS 和 Android 的 Adob​​e AIR 项目。
我们使用 Jenkins 运行 ANT 构建脚本自动构建事物。它根据不同的编译(发布和测试版本)打包不同版本的应用程序,并且测试版本会在其中打包更多不同的配置。

到目前为止,一切都很好。该构建在我的本地机器上运行,该机器运行 ANT 1.8.4 和 AIR 3.6 SDK。

问题是,有时或最近大部分时间,在 Jenkins 机器(Mac Mini)上,构建失败并显示如下错误消息:

package-android-versions:
   [delete] Deleting directory /private/var/jenkins/workspace/**********/dist/android/release
    [mkdir] Created dir: /private/var/jenkins/workspace/*************/dist/android/release
     [echo] packaging for android...
     [echo] done
   [delete] Deleting directory /private/var/jenkins/workspace/************/dist/android/test/dummy
    [mkdir] Created dir: /private/var/jenkins/workspace/**************/dist/android/test/dummy
     [echo] packaging for android...
     [java] SDK component at air/android/device/Runtime.apk is out of date

正如您可能注意到的,第一个 package 命令成功了,所以我的 SDK 组件不可能是过时的。那么第一个包命令也会失败。

以下是相关的 ANT 构建命令:

        <echo>packaging for android...</echo>
        <java jar="${AIR_SDK_HOME}/lib/adt.jar" fork="true" failonerror="true">
            <jvmarg line="-Xmx1024m" />
            <jvmarg line="-XX:MaxPermSize=2048m" />
            <arg line="-package"/>
            <arg line="-target apk-captive-runtime"/>
            <arg line="-storetype pkcs12 -keystore '${dir.portal}/self-signed.p12' -storepass ******"/>
            <arg line="'@{destination}/${app.name}@{label}' '@{source}/${app.descriptor}'" />
            <arg line="-C '@{source}' ."/>
            <arg line="-C '${dir.assets.runtime.android}' ."/>
        </java>
        <echo>done</echo>

我已经尝试增加 java 命令可用的内存量(因为根据我的经验,这通常是导致失败的原因),但这不是这里的解决方案。

另外,我已经查看了这个类似问题的答案,但是我们的构建机器在编译和打包之间不会去喝咖啡,所以这不是真正的答案;)

还有其他想法吗?

4

1 回答 1

1

我做了一些调查:adt.jar 正在启动一个单独的进程,以使用 lib/android/bin/aapt 从 Runtime.apk 获取 Android 版本信息。看起来这个单独进程的调用和/或其输出的读取可能是这里的罪魁祸首。

如果没有实际获取可编译版本中的 adt.jar 的源代码并添加额外的调试信息,我无法确定这是问题所在,但它看起来很像。错误触发器可以是机器上影响线程或文件读取的任何东西,这基本上是任何系统活动。

AIR SDK 3.8 中的 adt.jar 在启动外部进程的区域中包含一个小的更改,以确保完全读取 aapt 命令的输出。

升级到 3.8 可能会解决这个问题,如果不修改 adt.jar 则无法修复 3.6 版本。

PS:哈弗兰克!:-)

于 2013-07-05T21:12:48.293 回答