RAD Studio 10.3.3的主要特性是對 Android 64 位平台的 Delphi 語言支持。

Delphi支持Android 64 

通過新 Delphi 編譯器實現Android 64 位平台,該編譯器基於LLVM,如 Android 32 位對應的編譯器(和 iOS 編譯器)。此編譯器仍使用 ARC 內存模型,以減少 Google 要求存儲提交的 64 位遷移工作。IDE 提供了將新平台添加到現有項目、編譯和調試以及部署到商店的功能(稍后會詳細介紹)。

我們在 Android 上支持的所有庫都可用,從 RTL 到 FireMonkey,通過 FireDAC 形成數據庫訪問到並行編程庫,因此您的代碼應該可以相當順利地遷移。Android 64 還支持 InterBase 2020(剛剛發布)。

Android 64位警告

開始構建 Android 64 位應用程序時需要考慮一些障礙,最大的問題是大約 50% 的 Android 設備具有 32 位CPU,或者它們具有64位CPU但運行 32 位版本操作系統,因此無法運行64位Android 應用程序。

如果您想驗證您的 Android 設備 CPU 是否可以運行 64 位應用程序,一種選擇是使用 Play 商店中的現有應用程序,如下所示:

  • AIDA64(查看CPU頁面中的信息)
  • CPU-Z  (檢查系統頁面)

如果顯示你的CPU有64位ARMv8-A指令集,但設置為32位模式,則說明Android版本不是64位。如果出現不匹配,目前您在運行 64 位 APK 時會收到一條特定的錯誤消息,但在您嘗試調試時會收到一條不明確的錯誤消息。

另請注意,添加新的 64 位平台不會自動添加所有部署文件和其他 Java 庫,這些可能需要作為項目遷移的一部分進行一些微調。您還可以考慮使用所有正確的默認值從頭開始創建一個新的項目文件 (dproj)。

順利遷移64位代碼

一般情況下,現有的Delphi代碼只需要在64位平台上重新編譯,與此同時,作為開發者將獲得更大的地址空間——一個可能永遠不會在手機上使用的地址空間。

實質的區別在於:指針、對象引用、字符串引用和任何其他引用內存地址的數據類型都變成了64位,8字節的指針。這就意味着 SizeOf (Integer) 現在與 SizeOf (Pointer) 不等了。事實上,整數保留 4 個字節,而NativeInt類型取決於平台(32 位和 64 位分別為 4 或 8 個字節)。

如果您正在執行任何指針數學運算或具有依賴於數據結構對齊的代碼,則可能需要對其進行更改。如果您將整數轉換為指針,則同樣如此。如果您正在對本機庫進行低級調用,您可能還需要調整代碼。

Android 應用程序包支持

Delphi 10.3.3 為 Android 開發人員引入的另一個相關功能是對 AAB 格式(Android App Bundle)的支持。這是一種部署文件格式,能夠捆綁 32 位和 64 位二進制文​​件和文件,旨在存儲提交——您不能直接在手機上安裝aab包。與 Apple Universal 格式類似,一旦您上傳了一個包,最終用戶通過 Play 商店下載的將只會收到特定設備(及其位數的正確文件

要啟用 App Bundle 支持,需要為64位Android目標平台使用匹配的編譯器選項:

您還需要提供正確的配置信息,之后就可以從在IDE中生成.aab 文件並上傳到谷歌應用商店。