导致此错误的原因是:“air / android / device / Runtime.apk上的SDK组件已过期”

时间:2013-07-05 15:17:57

标签: android actionscript-3 ant air jenkins

我目前正在开发适用于iOS和Android的Adobe 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

您可能会注意到,第一个包命令成功,因此我的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命令可用的内存量(因为这经常导致我的体验失败),但这不是解决方案。

另外,我看了this similar question的答案,但我们的构建机器在编译和打包之间没有喝咖啡,所以这不是真正的答案;)

还有其他想法吗?

1 个答案:

答案 0 :(得分: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:哈哈! : - )