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
相关产品推荐
相关产品推荐

