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

Delphi调用Android SystemClock遇EJNIFatal Exception:方法未找到求助

关于Rad Studio中调用Android SystemClock.elapsedRealtime()的问题

我最近在Rad Studio 18.0里写了一段Delphi代码,想获取Android系统启动后的时间,代码本身能正常编译,但执行TimeSinceBoot函数时接连出问题:

  1. 一开始直接抛出异常,提示找不到Androidapi.JNIMarshal.pas文件。我已经在这两个路径找到了这个文件:

    • C:\Users\Public\Documents\Embarcadero\Studio\18.0\CatalogRepository\Android_Common_Files_Enterprise-18.0.Build.22858.6822\TARGETDIR\source\rtl\android
    • C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl\android
      但Rad Studio就是没法自动关联这个文件,手动把它添加到项目部署后,又出现了新错误。
  2. 新错误是EJNIFatal Exception; Invocation Error : Method can't be found,现在我搞不清楚这个“找不到的方法”到底是ELAPSED_REALTIME还是doubleValue?

我怀疑自己一开始对ELAPSED_REALTIME的理解就错了——它应该不是一个属性,而是SystemClock类里的elapsedRealtime()函数,但我不知道在Delphi的JNI绑定里该怎么正确调用这个方法。

附上我的代码:

unit SystemClock;
interface
uses Androidapi.JNI.JavaTypes, Androidapi.JNIBridge;
type
JSystemClockClass = interface(JObjectClass)
['{7C25E65F-A934-472E-A89E-C7F1DC10A292}']
function _GetELAPSED_REALTIME: JLong;
property ELAPSED_REALTIME: JLong read _GetELAPSED_REALTIME;
end;
[JavaSignature('android/os/SystemClock')]
JSystemClock = interface(JObject)
['{DC447EEB-147B-4A9B-B59F-2C84F959B2FD}']
end;
TJSystemClock = class(TJavaGenericImport<JSystemClockClass, JSystemClock>)
end;
function TimeSinceBoot(): Double;
implementation
function TimeSinceBoot(): Double;
begin
result:= TJSystemClock.JavaClass.ELAPSED_REALTIME.doubleValue / 60000.0;
end;
end.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:03:00