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

Delphi 12升级后Android 13应用启动Foreground Service崩溃求助

Delphi 12升级后Foreground Service启动崩溃问题分析

问题背景

应用在升级到Delphi 12前运行完全正常,升级后启动Foreground Service时直接崩溃,相关Android关键日志如下:

核心日志信息

// TAndroidHelper.Context.startService(GetIntent('com.embarcadero.services.SARTrackService'));

2024/08/19 08:38:26.162 I   nz.sartrack.SARTrackApp 32317   32317   info    SARTrack Client: [C] [08:38:26.154] isServiceStarted...
2024/08/19 08:38:26.173 I   nz.sartrack.SARTrackApp 32317   32317   info    SARTrack Client: [C] [08:38:26.166] isServiceStarted: TRUE

随后出现大量错误日志:
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp ----- class 'Lcom/embarcadero/services/SARTrackServiceProxyInterface;' cl=0x12c15918 -----
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp objectSize=188 (172 from super)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp access=0x0000.0001
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp super='java.lang.Class<java.lang.Object>' (cl=0x0)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp interfaces (1):
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 0: java.lang.Class<java.lang.reflect.InvocationHandler> (cl=0x0)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp vtable (4 entries, 11 in super):
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 0: java.lang.Object com.embarcadero.services.SARTrackServiceProxyInterface.CreateProxyClass(java.lang.Class, long)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 1: void com.embarcadero.services.SARTrackServiceProxyInterface.cleanNative(long)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 2: java.lang.Object com.embarcadero.services.SARTrackServiceProxyInterface.dispatchToNative2(java.lang.String, java.lang.String, java.lang.Object[], long)
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 3: java.lang.Object com.embarcadero.services.SARTrackServiceProxyInterface.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp direct methods (1 entries):
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 0: void com.embarcadero.services.SARTrackServiceProxyInterface.<init>()
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp instance fields (1 entries):
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp 0: long com.embarcadero.services.SARTrackServiceProxyInterface.pointer
2024/08/19 08:38:26.383 E   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp Failed to register native method com.embarcadero.services.SARTrackServiceProxyInterface.dispatchToNative(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;J)Ljava/lang/Object; in /data/app/~~Fp6XJtxT5BQ_Ek-WC7J9rw==/nz.sartrack.SARTrackApp-kHH5upNo6s_PgHGit_wdsw==/base.apk
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: JNI RegisterNatives called with pending exception java.lang.NoSuchMethodError: no static or non-static method "Lcom/embarcadero/services/SARTrackServiceProxyInterface;.dispatchToNative(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;J)Ljava/lang/Object;"

随后出现大量致命日志:
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void com.embarcadero.rtl.ProxyService.onCreateNative(java.lang.Object, java.lang.String) (ProxyService.java:-2)
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void com.embarcadero.rtl.ProxyService.onCreate(java.lang.Object, java.lang.String) (ProxyService.java:51)
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void com.embarcadero.services.SARTrackService.onCreate() (SARTrackService.java:41)
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void android.app.ActivityThread.handleCreateService(android.app.ActivityThread$CreateServiceData) (ActivityThread.java:5073)
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void android.app.ActivityThread.-$$Nest$mhandleCreateService(android.app.ActivityThread, android.app.ActivityThread$CreateServiceData) (ActivityThread.java:-1)
2024/08/19 08:38:26.383 F   nz.sartrack.SARTrackApp 32317   32317   ack.SARTrackApp java_vm_ext.cc:591] at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2428)

问题原因分析

从日志的核心错误点可以明确:

  • JNI在注册本地方法时失败,系统提示找不到com.embarcadero.services.SARTrackServiceProxyInterface.dispatchToNative方法
  • 但日志中显示该接口实际存在的是dispatchToNative2(带后缀2)的同名方法

这说明Delphi 12在生成Android服务代理类时,对JNI交互的方法命名做了变更,而旧项目的相关代码未同步适配:

  1. Delphi 12重构了服务与Native层交互的逻辑,将原dispatchToNative方法重命名为dispatchToNative2
  2. 项目升级后,自动生成的Java代理类(如SARTrackServiceProxyInterface)已更新为新方法名,但JNI注册逻辑仍在尝试绑定旧方法名,导致方法找不到的错误,最终触发应用崩溃
  3. 也有可能是Delphi 12的RTL(运行时库)中服务代理的实现逻辑发生了变化,旧项目的服务代码未适配这种底层变更

内容的提问来源于stack exchange,提问作者Bart Kindt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:18:10