actionscript-3 – Flex 4.6编译检查是否为ios或android编译

我正在为iOS和
Android创建一个移动应用程序,使用flashbuilder 4.6,Flex SDK 4.6.

我正在使用ANE进行Google Cloud Messaging,我想在编译iOS时跳过它.在flashbuilder中是否有任何定义来检查它是否针对iOS或Android进行编译,因此我可以跳过GCM导入.每次编译我的应用程序时,我都不想更改我的编译器定义.

另一种方法是在编译器参数中使用IF语句:

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

有可能做这样的事情,还是我可以在我的代码中使用任何内置的编译器定义?

编辑:
包管理器有3个类:

> NotificationManager.as
> NotificationManagerIOS.as(适用于iOS的Singleton,使用Air的RemoteNotification)
> NotificationManagerAndroid.as(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编译器的虚拟机,因此无法执行您想要执行的操作.但是,有两种常见方法可以解决此问题:

>为每个部署目标单独编译,尤其是在嵌入的特定于操作系统的支持文件很大的情况下.您可以将IDE项目设置为包含多个文件夹,以便为每个目标编译只是打开每个文件夹并编译内容.阅读Christian Cantrell的Writing multiscreen AIR apps,了解如何安排为单独的部署目标设置项目.
>如果嵌入的,特定于操作系统的支持文件很小,或者您只想管理一个项目文件夹,则可以通过使用flash.system.Capabilities确定其目标来指示运行时使用相应的文件:

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

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

点赞