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

Firemonkey安卓应用资源找不到求助:Windows正常安卓异常

为什么Windows能找到资源但Android找不到?

这个问题主要源于Windows和Android的资源存储机制差异,以及Android平台的大小写敏感性,具体原因和解决方案如下:

核心原因

  1. 资源存储方式不同
    Windows平台下,你添加的资源会被嵌入到PE(可执行文件)的资源段中,HInstance指向程序实例,RT_RCDATA是Windows标准资源类型,所以TResourceStream能正常读取。
    但Android平台下,项目中的资源会被打包到APK的assets目录中,而非PE资源段。HInstance在Android上的含义和Windows完全不同,基于它的TResourceStream构造函数无法识别APK里的assets资源,自然找不到。

  2. 大小写敏感问题
    Windows的资源系统不区分大小写,但Android的文件系统和资源系统严格区分。如果代码中写的资源名(比如"String_ressource")和实际添加的资源名大小写不一致,Android就会找不到资源,而Windows能正常识别。

解决方案

1. 针对Android平台使用专门的资源加载方式

FireMonkey提供了TAssetManager类来访问Android的assets资源,你需要针对不同平台做条件编译:

uses
  System.SysUtils, System.Classes,
  {$IFDEF ANDROID}
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.Helpers;
  {$ENDIF}

function GetResourceStream(const ResourceName: string): TStream;
begin
  {$IFDEF MSWINDOWS}
  // Windows平台继续使用原方式
  Result := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA);
  {$ENDIF}
  {$IFDEF ANDROID}
  // Android平台通过AssetManager访问assets资源
  var AssetManager := TAndroidHelper.Context.getAssets;
  Result := TAssetStream.Create(AssetManager.Open(StringToJString(ResourceName)));
  {$ENDIF}
end;

2. 确保资源的Deployment设置正确

打开Project -> Deployment,检查你的资源文件:

  • 确认资源文件已被添加到Deployment列表中
  • 把Remote Path设置为assets\(这样资源会被打包到APK的assets目录下)
  • 确保Platform列包含Android平台

3. 严格匹配资源名的大小写

检查代码中的资源名和Project -> Resources and images中的资源名完全一致(包括大小写),比如代码里用"String_ressource",资源列表里的Resource Name也要完全一样,不能写成"string_ressource"或"String_Ressource"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:33