【问题标题】:log.d not working in Android services (Delphi Berlin)log.d 在 Android 服务中不起作用(Delphi Berlin)
【发布时间】:2016-12-12 14:13:30
【问题描述】:

我正在使用 Delphi-Berlin Update-2

Android 服务不能使用 log.d(),因为它需要使用 FMX.Types,使用它会导致整个应用崩溃。

我尝试从 FMX.Types 中提取日志部分,但没有成功。

是否有任何解决方案让 log.d 工作?

到目前为止,我一直在使用 IdUDP,但这不是一个理想的解决方案。

【问题讨论】:

  • 如果您认为库中存在缺陷,请提交错误报告。 Stack Overflow 不是该产品的开发者。如果您认为您的代码有缺陷,请提供minimal reproducible example
  • @David,见 RSP-16524,我知道 SO 不是开发人员,但希望有人知道解决方法。
  • 如果 Emba 工程师无法重现您的错误,我不会感到惊讶。提交错误报告时,您应该包括尽可能多的重现所需的步骤。我会包括一个完整的程序,最简单的程序。我肯定会包括您正在使用的设备的详细信息。 Delphi 在移动设备上的许多问题都与特定设备有关。

标签: android delphi service


【解决方案1】:

我使用的是东京,但在真正的 LG-LS997 设备上遇到了同样的问题。

您可以像这样使用内置的LOGI

uses Androidapi.Log;

procedure MyProcedure(msg: String);
var
  M: TMarshaller;
begin
  LOGI(M.AsUtf8(msg).ToPointer);
end;

更多信息:

每次在我的服务中包含 FMX 单元时,都会出现分段错误。 Log.d 调用LOGI,后者调用Android NDK 函数__android_log_write。还有__android_log_print 用于格式化,但还没有被包装。无论如何,您可能应该只是在 Delphi 中格式化并致电__android_log_write

LOGI 被定义为调用__android_log_write,日志级别为ANDROID_LOG_INFO。警告、错误和致命也被包装为LOGWLOGELOGF

我已经在这里封装了其余的日志记录级别(未经测试,不包括ANDROID_LOG_UNKNOWN):

function LOGDEF(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_DEFAULT, 'default', Text);
end;

function LOGV(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_VERBOSE, 'verbose', Text);
end;

function LOGDBG(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_DEBUG, 'debug', Text);
end;

function LOGS(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_SILENT, 'silent', Text);
end;

【讨论】:

  • 非常感谢米莉!刚刚试了一下,效果很好。所以即使在东京也不是固定的?我停止了 Delphi 订阅,因为我提交的一些错误和问题仅在 18 个月后才得到解决。
  • @JBart 是的,在东京还是坏掉了。我不怪你。 TEdit 仍然有问题。我只是在夸大 Android 视图并使用它们。
猜你喜欢
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多