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

咨询MAUI中iOS On Demand Resource及Android资源配置方法

.NET 9 MAUI 配置 iOS 按需资源(On Demand Resources)与 Android Asset Packs

iOS 端配置按需资源

MAUI 默认的可视化资源管理界面未提供直接设置 On Demand Resource Tags 的选项,你可以通过手动编辑项目文件(.csproj)来完成配置:

  • 定位到需要设为按需资源的文件条目,将其 BuildAction 设为 BundleResource,同时添加 OnDemandResourceTags 元数据指定资源标签:
<ItemGroup>
  <BundleResource Include="Resources\OnDemand\HighResImages\Banner.png">
    <OnDemandResourceTags>FeatureImages</OnDemandResourceTags>
  </BundleResource>
  <BundleResource Include="Resources\OnDemand\Audio\Tutorial.mp3">
    <OnDemandResourceTags>AudioAssets</OnDemandResourceTags>
  </BundleResource>
</ItemGroup>
  • 代码调用逻辑与 Xamarin.Forms 一致,使用 NSBundleResourceRequest 发起资源请求:
using Foundation;
...
var resourceRequest = new NSBundleResourceRequest(new NSSet("FeatureImages"));
await resourceRequest.BeginAccessingResourcesAsync();

// 资源已就绪,执行后续操作
// 例如加载图片:var image = UIImage.FromBundle("Resources/OnDemand/HighResImages/Banner.png");

resourceRequest.EndAccessingResources();

Android 端配置 Asset Packs

.NET 9 MAUI 已支持 Android App Bundle 的 Asset Packs,配置步骤如下:

  1. 创建 Asset Pack 模块:在解决方案中新增一个 Android Library 项目作为 Asset Pack,将需要按需下载的资源放到该项目的 Assets 目录下。
  2. 配置 Asset Pack 属性:编辑 Asset Pack 项目的 .csproj,设置资源包类型与交付模式:
<PropertyGroup>
  <AndroidAssetPackType>on-demand</AndroidAssetPackType>
  <AndroidAssetPackDeliveryMode>on-demand</AndroidAssetPackDeliveryMode>
  <AndroidAssetPackName>com.yourcompany.yourapp.featureimagespack</AndroidAssetPackName>
</PropertyGroup>
  1. 关联主项目与 Asset Pack:在 MAUI 主项目的 .csproj 中添加项目引用并声明 Asset Pack:
<ItemGroup>
  <ProjectReference Include="..\FeatureImagesPack\FeatureImagesPack.csproj" />
</ItemGroup>
<PropertyGroup>
  <AndroidAssetPacks>com.yourcompany.yourapp.featureimagespack</AndroidAssetPacks>
</PropertyGroup>
  1. 代码中请求下载:使用 SplitInstallManager 发起资源包下载请求:
using Google.Play.Core.AppUpdate;
...
var splitInstallManager = SplitInstallManagerFactory.Create(Android.App.Application.Context);
var request = SplitInstallRequest.NewBuilder()
    .AddModule("featureimagespack")
    .Build();

var stateListener = new SplitInstallStateUpdatedListener(state => {
    if (state.Status == SplitInstallStatus.Downloaded) {
        // 资源已下载,可通过 Assets 目录访问
        using var assetStream = Android.App.Application.Context.Assets.Open("Banner.png");
        // 处理资源流
    }
});

splitInstallManager.RegisterListener(stateListener);
await splitInstallManager.StartInstallAsync(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:53:11