我目前正在开发适用于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但我们的构建机器没有去编译和包装间喝咖啡,所以不能成为真正的答案;)
任何其他的想法?
供将来参考:com.adobe.air.apk.APKOutputStream.getRuntimeVersion()中发生的错误 –
似乎升级到AIR SDK 3.7也会修复它。另外,它看起来像错误只在打包'apk-captive-runtime'应用程序时才会出现。 – frankhermes
关于仅在使用捕获运行时进行编译时出现的错误:是的,这是正确的 - 错误在捕获运行时加载/附加阶段(APKOutputStream.addCaptiveRuntimeLibs())中触发。 –