2013-07-05 26 views
2

我目前正在开发适用于iOS和Android的Adobe AIR项目。
我们自动使用Jenkins运行ANT构建脚本来构建事物。它根据不同的编译版本(发行版本和测试版本)打包不同版本的应用程序,并且测试版本包含更多不同的配置。导致此错误的原因是:“air/android/device/Runtime.apk中的SDK组件过时”

到目前为止,这么好。该构建在运行ANT 1.8.4的本地机器上与AIR 3.6 SDK结合使用。

的问题是,即有时,或最近大部分时间,詹金斯机(一台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

我做了一些调查: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:哈弗兰克! :-)

+0

供将来参考:com.adobe.air.apk.APKOutputStream.getRuntimeVersion()中发生的错误 –

+0

似乎升级到AIR SDK 3.7也会修复它。另外,它看起来像错误只在打包'apk-captive-runtime'应用程序时才会出现。 – frankhermes

+0

关于仅在使用捕获运行时进行编译时出现的错误:是的,这是正确的 - 错误在捕获运行时加载/附加阶段(APKOutputStream.addCaptiveRuntimeLibs())中触发。 –

相关问题