4

flashbuilder 4.6、Flex SDK 4.6 を使用して、iOS および Android 用のモバイル アプリを作成しています。

iOS 用にコンパイルするときにスキップしたい Google Cloud Messaging 用の ANE を使用しています。iOS または Android 用にコンパイルされているかどうかを確認するための定義が flashbuilder 内にあるので、GCM インポートをスキップできます。アプリをコンパイルするたびにコンパイラの定義を変更したくありません。

もう 1 つの方法は、コンパイラの引数で IF ステートメントを使用することです。

if (compiling for ios)
    -define+=CONFIG::IOS,true
else
    -define+=CONFIG::IOS,false

このようなことを行うことは可能ですか、またはコードで使用できる組み込みのコンパイラ定義はありますか?

編集: パッケージ マネージャーには 3 つのクラスがあります。

  • NotificationManager.as
  • NotificationManagerIOS.as (iOS 用シングルトン、Air からの RemoteNotification を使用)
  • NotificationManagerAndroid.as (Singleton for Android、iOS をサポートしない ANE を使用)

Android 用のコンパイルは問題ありません。iOS 用のコンパイルでは、ANE のクラスでエラーが発生します。

NotificationManager.as:

package managers {
    public class NotificationManager {
         public static function getInstance():NotificationManager {
              var ios:Boolean = (Capabilities.manufacturer.indexOf("iOS") != -1);
              if (ios) {
                   return NotificationManagerIOS.getInstance();
              } else {
                   return NotificationManagerAndroid.getInstance();
              }
         }
    }
}
4

1 に答える 1

2

Flash Player AVM2 ランタイムは、JITコンパイラを使用する仮想マシンであるため、やりたいことはできません。ただし、この問題に対処するには、次の 2 つの一般的な方法があります。

  1. 特に埋め込まれた OS 固有のサポート ファイルが大きい場合は、配置ターゲットごとに個別にコンパイルします。複数のフォルダーを含むように IDE プロジェクトを設定して、各ターゲットのコンパイルが各フォルダーを開いて内容をコンパイルするだけで済むようにすることができます。Christian Cantrell の「Writing multiscreen AIR apps」を読んで、個別の展開ターゲット用にプロジェクトを設定する方法を確認してください。

  2. 埋め込まれた OS 固有のサポート ファイルが小さい場合、または 1 つのプロジェクト フォルダーのみを管理する場合は、flash.system.Capabilitiesを使用してターゲットを決定することにより、適切なファイルを使用するようランタイムに指示できます。

    var isIOS:Boolean = (Capabilities.manufacturer.indexOf("iOS") != -1);

    var isAndroid:Boolean = (Capabilities.manufacturer.indexOf("Android") != -1)

于 2013-07-02T14:51:22.237 に答える