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 文件并上传到谷歌应用商店。