Delphi 10.4.2 社区版,安装后,最高支持到安卓10,API-29。
但是,现在如果想发布到 Google play,需要:1. 必须是 APP bundle 文件,也就是 AAB 文件,而不能是 APK;
2. 必须是最低支持 API-30;
上网搜索各种说法,最终还是自己解决。Delphi 盒子论坛的 "emailx45"提供了很多思路和帮助。
记录一下,如果有人遇到相似问题,可以看这里。
一. 如何编译 AAB:一开始查到的网页是 Marco Cantu 的博客文章,说的是 Delphi 10.3.3,在 Delphi IDE 的菜单:Project / Options / Building / Delphi compiler / Compiling / 底下,有一个:
Other options -- Generate Android bundle file, 勾选。
然后在 Delphi 10.4.2 的相同位置,没有这个,只有:Generate Android 32bit and 64bit binaries 可以勾选。但勾选后,依然没有编译出 AAB 文件,仍然是 APK 文件。
后来才发现,其实只要在 IDE 窗口右边的 Project 名字底下的编译目标平台那里,除了选择 Android 64,还要选择 Configuration 为 Application store,它就会生成 AAB 文件。
二. 如何提升编译出来的 AAB 的 API-LEVEL 为 30:上述编译出来的 AAB 文件,上传到 Google Play ,会提示错误信息 API-LEVEL 为29,最低必须是 30.
Delphi 10.4.2 安装的目录底下有 Android SDK,目录:
C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203
这底下,有一个 【SDK Manager.exe】,双击运行它,出了一个 GUI 界面。里面列出了已经安装以及没有安装但可以勾选安装的一堆包,但最高就是 Android 10(API-29)。想装 API-30,这里没有。
上网搜,官方的说法是安装 Android Studio,然后用里面提供的 SDK Manager 来安装。
不想装 Android Studio,太大。
如何安装 Android SDK 支持 API-30继续网上搜索,有提到使用命令行的 SDK Manager。
在 C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203 底下搜索 sdk manager,结果发现有两个 BAT 文件:
1. C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203cmdline-toolsbin 底下有一个 sdkmanager.bat
2. C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203toolsbin 底下有一个 sdkmanager.bat
执行第一个 sdkmanager.bat,结果出错。
执行第二个,也就是 tools 目录底下那个,而不是 cmdline-tools 底下那个,成功。
根据 google 官方文档的例子,在 CMD 里面,在 tools 目录下,手动执行以下命令,成功:
sdkmanager "platform-tools" "platforms;android-30"成功后,可以看到,在执行成功之前,目录:
C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203platforms
底下,只有一个 android-29 目录。
执行成功后,多了一个 android-30 目录。
到这里,为系统增加支持 API-30 的 SDK 成功。
三. Delphi 如何设置才能编译出支持 Android API-30 的 AAB 用于上传 Google Play 发布:1. Delphi IDE 的菜单,Tools / Options ,打开一个窗口。
2. 在上述窗口中,在左侧找到 Deployment,拉开,底下有一个 SDK manager,选中这个 SDK manager,右侧出来的界面,里面有 Android-32bit 和 Android 64-bit,选中 64bit,右侧有多条选项,最底下一条是 API level,它指向一个目录。打开目录,发现是:
C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203platformsandroid-29
修改它指向 Android-30:
C:UsersPublicdocumentsEmbarcaderoStudio21.0CatalogRepositoryAndroidSDK-2525-21.0.40680.4203platformsandroid-30
3. 重点来了,做完上述修改,build 然后 deploy,发现出来的 AAB,上传到 google,依然提示是 API-29 的。查看该 Project 目录底下的:AndroidManifest.xml 文件,其中有一句:
这里依然是 29,所以...........
4. 不知道 Delphi 哪里可以修改设置。那就直接修改模板文件:AndroidManifest.template.xml
模板文件里面有这么一行:
android:targetSdkVersion="%targetSdkVersion%"
直接将它写死为:
android:targetSdkVersion="30"
5. 再次编译,然后 deploy,成功。得到的 AAB 文件上传到 Google Play,通过。
----------------------------------------
折腾了 2 天。关于 Delphi 的资料,网上太少。---------------------------------------
追加:昨天搞得太晚,上传 google play 成功,就没再继续测试了。今天继续测试的结果如下:
修改 AndroidManifest.xml 里面的 android:targetSdkVersion="29" 改为 android:targetSdkVersion="30",可以通过 google play 关于最低 API level 的要求。
但是,在我自己的真机上测试,把编译的 Configuration 从 Application store 改为 Development 后,插上 OPPO 手机,手机显示安卓版本 11,编译发布到真机上,安装 APP失败。显示的错误信息是:INSTALL_PARSE_FAILED_NO_CERTIFICATES
反复测试,确认这个 INSTALL_PARSE_FAILED_NO_CERTIFICATES 的问题是修改 android:targetSdkVersion="29" 导致。
因此,是否上传 google play 成功,但实际上从 google play 下载安装 APP 的时候,也会失败?需要进一步测试才能知道。



