You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Play Asset Delivery多文件夹场景下,如何仅按需安装指定子文件夹内容

如何在Play Asset Delivery中仅按需安装指定子文件夹的资源

当然可以实现只安装folder1而跳过folder2的需求!不过你需要调整一下Asset Pack的配置方式——默认情况下,单个on-demand类型的Asset Pack会被作为一个整体交付,无法拆分其中的子文件夹单独下载。下面是具体的实现步骤:

1. 拆分独立的Asset Pack

把你现有的on_demand文件夹拆分成两个独立的Asset Pack模块,比如分别命名为on_demand_folder1on_demand_folder2

你的项目根目录
├─ app
├─ on_demand_folder1
│  └─ src/main/assets
│     └─ folder1  // 原来的folder1资源
└─ on_demand_folder2
   └─ src/main/assets
      └─ folder2  // 原来的folder2资源

2. 配置Asset Pack的交付类型

在每个Asset Pack模块的build.gradle(或build.gradle.kts)中,设置它们的交付类型为on-demand

对于on_demand_folder1/build.gradle

plugins {
    id 'com.android.asset-pack'
}

assetPack {
    packName = "on_demand_folder1"
    dynamicDelivery {
        deliveryType = "on-demand"
    }
}

对于on_demand_folder2/build.gradle

plugins {
    id 'com.android.asset-pack'
}

assetPack {
    packName = "on_demand_folder2"
    dynamicDelivery {
        deliveryType = "on-demand"
    }
}

然后在你的app模块的build.gradle中,声明这两个Asset Pack依赖:

android {
    // ...其他配置
}

assetPacks = [":on_demand_folder1", ":on_demand_folder2"]

3. 在代码中按需请求指定的Asset Pack

当你需要使用folder1的资源时,只需要请求安装on_demand_folder1这个Asset Pack即可,folder2不会被自动下载:

Kotlin示例:

import com.google.android.play.core.assetpacks.AssetPackRequest
import com.google.android.play.core.assetpacks.PlayAssetDelivery

// 请求安装on_demand_folder1
val assetPackRequest = AssetPackRequest.newInstance("on_demand_folder1")
PlayAssetDelivery.getInstance(applicationContext).fetch(assetPackRequest)
    .addOnSuccessListener {
        // 资源下载安装完成,现在可以访问folder1中的内容
        // 比如通过AssetManager访问:assets.open("folder1/your_resource.file")
    }
    .addOnFailureListener { exception ->
        // 处理下载失败的情况,比如提示用户重试
    }

关键说明

  • 如果你不拆分Asset Pack,是无法单独下载其中的子文件夹的——因为Play Asset Delivery的最小交付单位是整个Asset Pack,只有当整个包下载完成后,你才能访问里面的任何资源。
  • 拆分后,你可以根据业务需求,在不同时机分别请求on_demand_folder1on_demand_folder2,完全控制哪些资源被下载。

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

火山引擎 最新活动