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

Android Install-time Asset Delivery无法访问资源文件夹求助

解决Install-time Asset Delivery资源未打包/无法访问问题

以下是针对问题的排查和修复步骤:

1. 确认目录结构与IDE识别状态

  • 确保drawable文件夹路径为 asset_pack1/src/main/assets/drawables(或自定义文件夹名),assets目录必须直接位于main目录下,不能出现嵌套错误。
  • 右键点击assets文件夹,选择Mark Directory as > Assets Root,确保Android Studio将其识别为资源目录(未被识别的目录不会被Gradle扫描打包)。

2. 补充Asset Pack的Gradle配置

在asset_pack1/build.gradle中添加sourceSets配置,明确指定assets目录路径,避免插件未自动扫描:

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

assetPack {
    packName = "asset_pack1"
    dynamicDelivery {
        deliveryType = "install-time"
    }
}

// 添加这段配置
android {
    sourceSets {
        main {
            assets.srcDirs = ['src/main/assets']
        }
    }
}

3. 清理构建缓存后重新构建

执行以下命令彻底清理缓存并生成bundle,排除旧缓存干扰:

./gradlew clean bundle

4. 修正资源访问方式

Install-time Asset Pack中的assets资源不能通过常规res资源方法(如getResources().getDrawable())访问,必须使用AssetManager读取:

Java示例

try {
    AssetManager assetManager = getAssets();
    // 路径为assets目录下的相对路径,例如drawables文件夹下的test.png
    InputStream inputStream = assetManager.open("drawables/test.png");
    Drawable drawable = Drawable.createFromStream(inputStream, null);
    // 后续使用drawable
    inputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

Kotlin示例

try {
    val assetManager = assets
    val inputStream = assetManager.open("drawables/test.png")
    val drawable = Drawable.createFromStream(inputStream, null)
    // 后续使用drawable
    inputStream.close()
} catch (e: IOException) {
    e.printStackTrace()
}

5. 验证Bundle内容

将生成的.aab文件重命名为.zip并解压,查看asset_packs/asset_pack1/assets/目录下是否存在目标drawable文件夹:

  • 如果存在:问题出在资源访问方式,按步骤4修正即可。
  • 如果不存在:回到步骤1-3检查目录拼写和配置,确保路径无错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:35:21