2013-07-02 103 views
4

我正在使用flashbuilder 4.6,Flex SDK 4.6爲iOS和Android創建移動應用程序。Flex 4.6編譯器檢查是否爲ios或Android編譯

我正在使用ANE進行Google雲消息傳遞,在編譯iOS版時我想跳過這一步。在flashbuilder中是否有任何定義來檢查它是否針對iOS或Android編譯,所以我可以跳過GCM導入。我不想每次編譯我的應用程序時更改我的編譯器定義。

另一種方法是使用的編譯參數的IF語句:

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

是否有可能做這樣的事情,或者是否有任何內置的編譯器定義,我可以在我的代碼使用?

編輯: 包管理器有3類:

  • NotificationManager.as
  • NotificationManagerIOS.as件(Singleton爲iOS,使用RemoteNotification自Air)
  • NotificationManagerAndroid.as件(Singleton於Android,用途ANE不支持iOS)

編譯爲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(); 
       } 
     } 
    } 
} 
+1

我發現它有用的腳本生成過程與ANT,那麼腳本可以爲編譯器參數的值('CONFIG :: IOS,TRUE')根據需要。 –

+0

也許這是一個選項,是的。謝謝。 – Marijn

回答

2

Flash播放器AVM2運行時是使用一個JIT編譯器,所以你想做的事是不可能的虛擬機。不過,也有2層通用的方法來處理這個問題:

  1. 編譯分別爲每個部署目標,尤其是在嵌入式操作系統支持的文件比較大。您可以將您的IDE項目設置爲包含多個文件夾,以便編譯每個目標只需打開每個文件夾並編譯內容。閱讀Christian Cantrell的Writing multiscreen AIR apps,瞭解如何爲獨立部署目標設置項目。

  2. 如果嵌入式操作系統支持的文件很小,或者如果你只需要管理一個項目文件夾,您可以直接運行,通過確定使用flash.system.Capabilities其目標來使用相應的文件:

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

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

+0

感謝您的回覆。我正在使用Capabilities類來實例化正確的類(Android和iOS的推送通知管理器)。但是,編譯iOS時,編譯器仍會讀取Android管理器類。 現在,我只是逐個編譯項目,並刪除我不需要的類,但如果我可以從flashbuilder編譯它們而不需要在編譯之前更改代碼中的任何內容,那將會更好。我會看看您提供的多屏幕空中應用程序 – Marijn