我正在使用条件编译来换出编译时使用的实际存储实现类。它必须在编译时完成,因为在桌面或其他类型的手机上运行时加载 iOS Storekit 或 Android 存储本机扩展将不起作用。
我创建了一个或多或少是一个外壳的 PurchaseService,它的存在只是为了继承并因此实现其中一个商店实现:
CONFIG::AMAZON
{
import com.zo.comm.amazon.PurchaseServiceImpl;
}
CONFIG::DESKTOP
{ // used for testing without having to copy to a device
import com.zo.comm.desktop.PurchaseServiceImpl;
}
CONFIG::GOOGLE
{
import com.zo.comm.google.PurchaseServiceImpl;
}
CONFIG::IOS
{
import com.zo.comm.ios.PurchaseServiceImpl;
}
public class PurchaseService extends PurchaseServiceImpl
{...}
每个 PurchaseServiceImpl 都继承自一个共享的通用 PurchaseServiceBase,它定义了 PurchaseService 类的外部接口。
以这种方式,唯一的条件编译代码位于 PurchaseService 类中。在 Flash Builder 中管理各种编译标志有点麻烦,但在 Ant 脚本中,它们很容易传递给 mxmlc:
闪存生成器:
-define=CONFIG::DESKTOP,false
-define=CONFIG::IOS,false
-define=CONFIG::ANDROID,true
-define=CONFIG::AMAZON,CONFIG::ANDROID&&false
-define=CONFIG::GOOGLE,CONFIG::ANDROID&&!CONFIG::AMAZON
-define=CONFIG::SANDBOX,false
-define=CONFIG::PRODUCTION,false
-define=CONFIG::STAGING,false
-define=CONFIG::LOCAL,true
请注意,我在其中留下了一些其他东西,以便您可以查看可能使用条件编译的其他东西。由于我的大多数配置标志都是三个一组,我只是把它们拼出来。如果它是一个简单的“如果不是 ANDROID,那就是 IOS”,我只需将 IOS 设置为 true 或 false 并将 ANDROID 设置为 !CONFIG::IOS,正如在亚马逊与谷歌中所见的那样(尽管我必须改变当我添加 Nook 支持时... :-)。
在蚂蚁中:
<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.ios}"/>
<define name="CONFIG::AMAZON" value="${output.config.environment.amazon}"/>
<define name="CONFIG::GOOGLE" value="${output.config.environment.google}"/>
<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}"/>
<define name="CONFIG::SANDBOX" value="${output.config.environment.sandbox}"/>
对导入使用条件编译的注意事项:您必须使用如上所示的大括号。以下将不起作用,并且最后一次导入将始终获胜:
CONFIG::AMAZON
import com.zo.comm.amazon.PurchaseServiceImpl;
CONFIG::DESKTOP
import com.zo.comm.desktop.PurchaseServiceImpl;
CONFIG::GOOGLE
import com.zo.comm.google.PurchaseServiceImpl;
CONFIG::IOS
import com.zo.comm.ios.PurchaseServiceImpl;
在 Flash Builder 中,您还需要管理哪些扩展包含在哪个平台的构建中。