RAD Studio 10.3.3 中的 Delphi Android 64 位支持
2019 年 11 月 21日发布的 RAD Studio 10.3.3 增加了对 Android 64 位平台的 Delphi 语言支持,IDE支持Android App Bundle。
RAD Studio 10.3.3的主要特性是对 Android 64 位平台的 Delphi 语言支持。
Android 64 位 Delphi 支持
平台支持是通过适用于 Android 64 位平台的新 Delphi 编译器提供的,该编译器基于 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 商店中的现有应用程序,如下所示:
如果显示你的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 文件以上传到 Google Play 商店。