Delphi XE8 的使用子句中包含特定于平台的多设备应用程序
Multi-Device Application with platform specific inclusions in the uses clause for Delphi XE8
我有一个用 Delphi XE8 编写的移动应用程序,我可以从两个单独的项目部署到 Android 或 iOS。维护单独项目的唯一原因是不同的目标平台有不同的 "uses" 部分不会编译 ...
以 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} uses ... {Else} uses .... {EndIf IOS} 为两个不同的目标平台定义两个单独的 uses 语句,但是那不会编译。
任何有用的建议将不胜感激。
-- 图片库
正如 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, ... ;
其他方式
{$IF Defined(MSWINDOWS) or Defined(MACOS)}
// some code
{$ENDIF}
我有一个用 Delphi XE8 编写的移动应用程序,我可以从两个单独的项目部署到 Android 或 iOS。维护单独项目的唯一原因是不同的目标平台有不同的 "uses" 部分不会编译 ...
以 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} uses ... {Else} uses .... {EndIf IOS} 为两个不同的目标平台定义两个单独的 uses 语句,但是那不会编译。
任何有用的建议将不胜感激。 -- 图片库
正如 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, ... ;
其他方式
{$IF Defined(MSWINDOWS) or Defined(MACOS)}
// some code
{$ENDIF}