4

モバイル用にコンパイルしている AIR アプリケーションがあります。IDE で使用すると正常にコンパイルされる iOS ネイティブ拡張機能 ( JamPot MobileBackup ) があります。

しかし、現在、他のプラットフォームをサポートするために移動しているため、IDE では十分ではありません。ビルド プロセスを実行する Ant スクリプトを作成することにしました。

問題は、この特定の ANE が拡張コードで MobileBackup クラスを定義しているように見えることであり、私が使用している他の A​​NE のような別の .as ファイルではありません。

私が見ているエラーは次のとおりです。

[mxmlc] Loading configuration file /Users/anderson/src/flex/4.6.0/frameworks/airmobile-config.xml
[mxmlc] /Users/anderson/src/xxx/src/xxx/Utility.as(32): col: 35 Error: Type was not found or was not a compile-time constant: MobileBackup.
[mxmlc] 
[mxmlc]         private static var mobileBackup:MobileBackup = new MobileBackup();
[mxmlc]                                         ^
[mxmlc] 
[mxmlc] /Users/anderson/src/xxx/src/xxx/Utility.as(32): col: 54 Error: Call to a possibly undefined method MobileBackup.
[mxmlc] 
[mxmlc]         private static var mobileBackup:MobileBackup = new MobileBackup();
[mxmlc]                                                            ^
[mxmlc] 
[mxmlc] /Users/anderson/src/xxx/src/xxx/Utility.as(32): col: 54 Error: Call to a possibly undefined method MobileBackup.
[mxmlc] 
[mxmlc]         private static var mobileBackup:MobileBackup = new MobileBackup();
[mxmlc]                                                            ^
[mxmlc] 
[mxmlc] /Users/anderson/src/xxx/src/xxx/Utility.as(21): col: 35 Error: Definition ie.jampot.nativeExtensions:MobileBackup could not be found.
[mxmlc] 
[mxmlc]     import ie.jampot.nativeExtensions.MobileBackup;

mxmlc 呼び出しは次のようになります。

<mxmlc 
   file="${app.main.class.file}" 
   output="${build.output.swf.file}" 
   locale="${LOCALE}" 
   static-rsls="false" 
   accessible="false" 
   configname="airmobile" 
   debug="${build.debug.mode}" 
   failonerror="true" 
   fork="true" 
   maxmemory="512m">
  <source-path path-element="${app.src.path}"/>
  <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs/*" />
  </compiler.library-path>
  <library-path file="${FLEX_HOME}/frameworks/locale/${LOCALE}" append="true"/>
  <library-path dir="${spicelib.lib.path}" includes="*.swc" append="true"/>
  <library-path dir="${parsley.lib.path}" includes="*.swc" append="true"/>
  <library-path dir="${app.lib.path}" includes="*.swc" append="true"/>
  <external-library-path file="${AIR_GLOBAL}" append="true"/>
  <external-library-path dir="${app.ane.path}" includes="*.ane" append="true"/>
  <define name="CONFIG::DESKTOP" value="${output.config.environment.desktop}"/>
  <define name="CONFIG::IOS" value="${output.config.environment.ios}"/>
  <define name="CONFIG::ANDROID" value="${output.config.environment.android}"/>
  <define name="CONFIG::PRODUCTION" value="${output.config.environment.production}"/>
  <define name="CONFIG::STAGING" value="${output.config.environment.staging}"/>
  <define name="CONFIG::LOCAL" value="${output.config.environment.local}"/>
</mxmlc>

app.ane.path は、プロジェクトの .ane ファイルのコレクションへのパスです。

また、external-library-path の代わりに library-path を使用してみました。

build.xml を追加する以外は、Flash Builder プロジェクトのレイアウトやコンテンツをまったく変更していません。IDE 内で問題なくコンパイルできます。

これを IDE の外でコンパイルするにはどうすればよいですか?

4

5 に答える 5

4

私はこれをすべて入力し、投稿する前にもう一度試してみることにしました. 私はそれを理解したので、他の人のためにここに結果を投稿します。

Flash Builder は、mxmlc を使用するために ANE から SWC をプルする必要があります。SWC のコピーを別の場所で見つけて、libs フォルダーに追加したところ、動作しました。

于 2012-06-20T04:13:42.037 に答える
3

理由は説明できませんが、.ane ファイルをコピーして名前を変更し、それらを .swc ファイルに変更して (文字通りコピーして名前を変更し、変換なしで)、ANE のディレクトリを外部ライブラリ パスとして参照すると、動作します。

<compiler.external-library-path dir="${ANE_DIR}" includes="*.swc" append="true" />
于 2013-02-08T14:46:37.967 に答える
1

他の人が投稿したように、mxmlc は *.swc 以外のファイル拡張子を無視してリンクします。すべての .ane ファイルを一時ディレクトリにコピーし、.swc という名前を付けてから mxmlc を呼び出すことで、これを解決しました。

<!-- Copy all ANE files to temp SWC files because mxmlc only accepts SWC for linkage -->
<copy todir="${basedir}/temp-swc" overwrite="true">
    <fileset dir="${basedir}/_extensions"/>
    <globmapper from="*.ane" to="*.swc"/>
</copy>

<mxmlc
    <!-- ... --> >

    <!-- ... -->

    <external-library-path dir="${basedir}/temp-swc" includes="*.swc" append="true"/>
</mxmlc>

<!-- Remove temporary SWC files after usage -->
<delete dir="${basedir}/temp-swc" />
于 2019-02-28T14:25:42.173 に答える