条件付きコンパイルを使用して、コンパイル時に使用されている実際のストア実装クラスを交換しています。たとえば、iOSストアキットまたはAndroidストアのネイティブ拡張機能をデスクトップまたは他の種類の電話で実行しているときにロードしても機能しないため、コンパイル時に実行する必要があります。
私は多かれ少なかれシェルであるPurchaseServiceを作成しました。これは、ストア実装の1つを継承して実装するためだけに存在します。
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は、PurchaseServiceクラスの外部インターフェースを定義する共有の汎用PurchaseServiceBaseから継承します。
このように、条件付きコンパイルコードはPurchaseServiceクラスにのみあります。さまざまなコンパイルフラグの管理は、Flash Builderでは少し面倒ですが、Antスクリプトでは、それらはmxmlcに簡単に渡されます。
Flash Builder:
-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
条件付きコンパイルを他にどのように使用できるかを確認できるように、他にもいくつか残っていることに注意してください。私の設定フラグのほとんどは3つのグループなので、それらを綴ります。単純な「ANDROIDでない場合はIOS」の場合、AMAZONとGOOGLEで見られるように、IOSをtrueまたはfalseに設定し、ANDROIDを!CONFIG :: IOSに設定します(ただし、変更する必要があります)それは私がNookサポートを追加するとき...:-)。
Antの場合:
<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では、どのプラットフォームのビルドにどの拡張機能が含まれているかを管理する必要もあります。