You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.1 Android应用闪屏后崩溃 编译无错(10.4.2迁移问题)

Delphi 10.4.2 迁移至 Delphi 11.1 Android 端启动崩溃问题

问题现象

  • 原项目基于Delphi 10.4.2开发,目标API 29;升级到Delphi 11.1、目标API 30后,已参照公开方案执行revert system files操作,编译阶段零错误
  • APK部署到Android设备后,闪屏展示结束立即崩溃,Development、Application Store两种编译配置均可稳定复现,覆盖不同厂商设备、多个Android版本,并非仅出现在Android 11系统
  • 同项目在Delphi 11.1下编译Windows版本运行完全正常,项目未使用任何第三方组件,全部采用Delphi官方自带组件

已提供的排查参考材料

单元引用代码

uses
  System.SysUtils, System.UITypes, System.UIConsts, System.Classes, FMX.Types, FMX.Controls,
  FMX.Forms, FMX.Dialogs, FMX.ListBox, FMX.StdCtrls, FMX.Edit, FMX.objects, FMX.Graphics,

{$IFDEF MSWINDOWS}
  IdContext,IdBaseComponent, IdComponent,IdCustomTCPServer, IdTCPServer, IdStack,IdIPWatch,
{$ENDIF}

{$IFDEF ANDROID}
  Androidapi.Helpers, Androidapi.JNIBridge, androidapi.JNI.JavaTypes, androidapi.JNI.Net,
  Androidapi.JNI.GraphicsContentViewText, 
{$ENDIF}

  FMX.ListView, FMX.ListView.Appearances, FMX.Grid, FMX.Memo,
  REST.Authenticator.Basic, REST.Authenticator.OAuth, REST.Client,
  FMX.ListView.Types, FMX.ListView.Adapters.Base, IPPeerClient,
  FMX.ScrollBox, FMX.Layouts, FMX.Controls.Presentation, System.Rtti,
  Data.Bind.Components, Data.Bind.ObjectScope, FMX.Grid.Style, REST.Types,
  FMX.Memo.Types
  ;

AndroidManifest 配置

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.madmartian.SimpleHomeController"
    android:versionCode="41"
    android:versionName="41"
    android:installLocation="auto">
    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="30" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
    <queries>

    </queries>
    <application
        android:persistent="False"
        android:restoreAnyVersion="False"
        android:label="SimpleHomeController"
        android:debuggable="true"
        android:largeHeap="False"
        android:icon="@drawable/ic_launcher"
        android:theme="@android:style/Theme.NoTitleBar"
        android:hardwareAccelerated="true"
        android:resizeableActivity="false"
        android:requestLegacyExternalStorage="true">

        <activity
            android:name="com.embarcadero.firemonkey.FMXNativeActivity"
            android:label="SimpleHomeController"
            android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
            android:launchMode="singleTask">
            <meta-data android:name="android.app.lib_name" android:value="SimpleHomeController" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />

    </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

迁移必做调整项

  • 撤销revert system files操作:这个操作是Delphi 11.x早期测试版的临时兼容方案,正式版11.1的Android系统库已经完成API 30适配,回滚系统文件会导致框架库版本不匹配,是闪屏后崩溃的最高发诱因。直接还原Delphi 11.1的原始系统文件,清理项目所有编译缓存后重新编译即可。
  • 修正Manifest主题配置:当前使用的@android:style/Theme.NoTitleBar是Android原生旧主题,Delphi 11.1的FMX框架初始化时要求必须匹配自带主题,否则会在Activity加载阶段直接崩溃,替换为@style/Embarcadero.FMX.NoTitleBar。
  • 补全Activity的configChanges参数:API 30新增了多个配置变更触发场景,当前配置缺少smallestScreenSize|screenLayout|uiMode|density参数,补全后可避免初始化阶段配置变更触发的Activity异常重启。
  • 补充FileProvider节点:Delphi 11.1的RTL在Android端初始化时会校验FileProvider,当前Manifest缺少对应节点会直接导致启动崩溃,需要在<application>节点内添加如下配置:
    <provider
      android:name="androidx.core.content.FileProvider"
      android:authorities="${applicationId}.fileprovider"
      android:exported="false"
      android:grantUriPermissions="true">
      <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/fileprovider_paths" />
    </provider>
    
  • 修正单元引用大小写:uses段里的FMX.objects单元名首字母小写,Delphi 11.1在Android平台采用LLVM编译链,对单元名大小写校验比10.4.2严格,改为官方标准命名FMX.Objects,避免链接时找不到单元实现。
  • 补全必要权限:如果用到网络状态检测逻辑,除了已有的ACCESS_WIFI_STATE,还需要添加android.permission.ACCESS_NETWORK_STATE权限,API 30下缺少该权限调用网络相关API会直接抛异常。
  • 彻底清理旧编译产物:删除项目目录下所有平台的输出文件夹(Android、Win32、Win64等),删除.dproj.local、.identcache本地缓存文件,避免10.4.2版本编译的中间文件被打包进新APK导致异常。

内容的提问来源于stack exchange,提问作者Mad Martian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:21:22