簡體   English   中英

Flex 4.6編譯器檢查是否針對iOS或Android進行編譯

[英]Flex 4.6 compiler check if compiling for ios or android

我正在使用Flashbuilder 4.6,Flex SDK 4.6創建適用於iOS和Android的移動應用程序。

我正在使用用於Google Cloud Messaging的ANE,在為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 for 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();
              }
         }
    }
}

Flash Player AVM2運行時是使用JIT編譯器的虛擬機,因此您無法執行任何操作。 但是,有兩種常見方法可以解決此問題:

  1. 針對每個部署目標分別進行編譯,尤其是在嵌入式,特定於操作系統的支持文件較大的情況下。 您可以將IDE項目設置為包含多個文件夾,以便針對每個目標進行編譯只需打開每個文件夾並編譯內容即可。 閱讀Christian Cantrell的Writing跨屏AIR應用程序,以了解如何安排為單獨的部署目標設置項目。

  2. 如果嵌入式的,特定於操作系統的支持文件很小,或者如果您只想管理一個項目文件夾,則可以通過使用flash.system.Capabilities確定其目標,來指示運行時使用適當的文件:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM