Delphi XE8的uses子句中具有平台特定包含的多设备应用程序

时间:2015-07-02 18:15:28

标签: android ios delphi delphi-xe8

我有一个用Delphi XE8编写的移动应用程序,我可以从两个独立的项目部署到Android或iOS。维护单独项目的唯一原因是不同的目标平台具有不能编译的不同“使用”部分......

以ANDROID作为目的地:

uses 
  ...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  IdURI,
  Androidapi.JNIBridge,
  Androidapi.JNI.Provider,
  AndroidApi.Jni.GraphicsContentViewText,
  Androidapi.JNI.Net,
  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,
  AndroidAPI.Helpers,
  AndroidApi.Jni.App,
  Androidapi.IOUtils, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

以IOS为目的地:

uses 
...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  ///// iOS Only ///////////
  MacApi.Helpers, iOSapi.UIKit,
  ///// iOS Only ///////////
  IdURI, IdSSLOpenSSLHeaders_Static,
  System.IOUtils,
  IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

我试过放置{ifdef IOS}使用... {Else}使用.... {EndIf IOS}为两个不同的目标平台定义两个单独的使用语句,但这不会编译。

非常感谢任何有用的建议。 - ImageBASE

2 个答案:

答案 0 :(得分:2)

正如TLama所指出的那样,你似乎错过了$字符。没有它,这些只被视为评论。你应该做的是......

{$IFDEF IOS}
...
{$ELSE}
...
{$ENDIF}

或者:

{$IFDEF IOS}
...
{$ENDIF}
{$IFDEF ANDROID}
...
{$ENDIF}

例如:

uses 
...
  FMX.Layouts, FMX.ListView,
  FMX.PhoneDialer,
  {$IFDEF IOS}
  ///// iOS Only ///////////
  MacApi.Helpers, iOSapi.UIKit,
    {$IFDEF CPUARM}
  // iOS Devices Only
  IdSSLOpenSSLHeaders_Static,
  // iOS Devices Only
    {$ENDIF}
  ///// iOS Only ///////////
  {$ENDIF}
  {$IFDEF ANDROID}
  ///// Android Only ///////////
  Androidapi.JNIBridge,
  Androidapi.JNI.Provider,
  AndroidApi.Jni.GraphicsContentViewText,
  Androidapi.JNI.Net,
  Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,
  AndroidAPI.Helpers,
  AndroidApi.Jni.App,
  Androidapi.IOUtils,
  ///// Android Only ///////////
  {$ENDIF}
  IdURI,
  System.IOUtils,
  IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Data.DBXDataSnap, IPPeerClient, ... ;

答案 1 :(得分:0)

其他方式

(^[-+]?([0-9]+)(\.[0-9]+)?)$'