我正在尝试使用ANT来使用Adobe SDK工具编译和打包iOS IPA文件。我需要使用ANT,因为构建需要一吨RAM,而Flash Builder在编译时会出现Java堆空间问题(即使我增加了ini文件中的最大内存)。
这就是我的ANT构建的核心:
<!-- Build the SWF and save it in the publish directory -->
<target name="3. Compile SWF" depends="2. Build New Directories">
<mxmlc
file="${MAIN_CLASS}"
output="${OUTPUT_SWF}"
debug="${DEBUG_FLAG}"
failonerror="true">
<load-config filename="${MOBI_CONFIG_FILE}"/>
<define name="MOBI_PROJECT::IS_iOS_BUILD" value="${IS_iOS_BUILD}" />
<define name="MOBI_PROJECT::DEBUG" value="${DEBUG_FLAG}" />
<source-path path-element="${MOBI_DIR}/src"/>
<library-path file="${FLEX_HOME}/frameworks/locale/en_US" append="true"/>
<library-path dir="${MOBI_LIB_RELEASE_DIR}" includes="*.swc" append="true"/>
<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs/*" />
</compiler.library-path>
<compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/air">
<include name="**/*.swc" />
</compiler.external-library-path>
<compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs">
<include name="**/*.swc" />
</compiler.external-library-path>
<compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/mx">
<include name="**/*.swc" />
</compiler.external-library-path>
</mxmlc>
</target>
<!-- Package the application to an ipa file & save it in the publish directory -->
<target name="4. Package Application" depends="3. Compile SWF">
<java jar="${ADT}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-target"/>
<arg value="ipa-test"/>
<arg value="-provisioning-profile"/>
<arg value="${iOS_PROVISIONING}"/>
<arg value="-storetype"/>
<arg value="pkcs12"/>
<arg value="-keystore"/>
<arg value="${iOS_KEYSTORE}"/>
<arg value="-storepass"/>
<arg value="${iOS_PASS}"/>
<arg value="${IPA_FILE}"/>
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${OUTPUT_SWF}"/>
</java>
</target>
我正在使用Flex 4.6 SDK和Air 3.4 beta SDK,并使用SDK中的airmobile-config.xml作为我的配置文件。
但是当我运行这个时,我收到以下错误:
4. Package Application:
[java] Exception in thread "main" java.lang.Error: Unable to find named traits: mx.core::SoundAsset
[java] at adobe.abc.Domain.resolveTypeName(Domain.java:232)
[java] at adobe.abc.Domain.resolveTypeName(Domain.java:149)
[java] at adobe.abc.GlobalOptimizer$InputAbc.resolveTypeName(GlobalOptimizer.java:272)
[java] at adobe.abc.GlobalOptimizer$InputAbc.readInstance(GlobalOptimizer.java:1000)
[java] at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:390)
[java] at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:278)
[java] at adobe.abc.LLVMEmitter.generateBitcode(LLVMEmitter.java:320)
[java] at com.adobe.air.ipa.AOTCompiler.convertAbcToLlvmBitcodeImpl(AOTCompiler.java:516)
[java] at com.adobe.air.ipa.BitcodeGenerator.main(BitcodeGenerator.java:80)
[java] Compilation failed while executing : ADT
如果我删除所有音频的[嵌入]标签,那么错误仍然存在,但它抱怨'mx.core :: ByteArrayAsset'。如果我删除项目中的每个[Embed]标签,那么它编译好。
我试图通过将这一行放在我的代码中来强制嵌入SoundAsset类:
import mx.core.SoundAsset;
...
new SoundAsset();
我甚至已经进入Flex SDK并复制了SoundAsset和ByteArrayAsset类并将它们放在我的项目中,但这些都没有帮助。
有人可以告诉我如何在保留我的[嵌入]标签的同时通过ANT编译IPA文件吗?
答案 0 :(得分:1)
我已经解决了这个问题!
我认为问题与我链接到库的方式有关。我最终删除了所有手工制作的ANT设置,而是从我的Flash Builder项目中导出设置,并使用它们。
这篇文章的全部细节,它挽救了我的生命: http://helpx.adobe.com/x-productkb/multi/compilation-results-flex-builder-flex.html