Android Kotlin中Assets文件存在但列表为空、读取无内容求助
Android Assets目录文件读取失败排查方案
1. 核对Assets目录结构与命名
- 确保目录路径为
app/src/main/assets,目录名必须全小写为assets(不能是Assets/ASSETS),且直接隶属于main目录,不要嵌套在res或其他目录下。 - 确认目标文件
Injector.js位于assets根目录,若在子目录(如assets/scripts/),读取时需填写相对路径scripts/Injector.js,且调用assets.list("scripts")才能看到该目录下的文件。
2. 检查构建配置与缓存
- 验证Module级
build.gradle的sourceSets配置,确保Assets目录被正确识别(默认自动配置,手动修改过需核对):android { sourceSets { main { assets.srcDirs = ['src/main/assets'] } } } - 执行清理重建:点击
Build -> Clean Project,再Rebuild Project;极端情况可手动删除项目根目录下的build文件夹后重新构建,避免缓存导致资源未打包。
3. 确认文件是否被打包进APK
- 将生成的APK文件解压,检查
assets目录下是否存在Injector.js:- 若文件不存在,排查文件名是否包含特殊字符(空格、中文、特殊符号),建议改用英文小写+下划线命名(如
injector.js)。 - 若文件存在但仍读不到,检查APK是否为最新构建版本,避免安装了旧版本的APK。
- 若文件不存在,排查文件名是否包含特殊字符(空格、中文、特殊符号),建议改用英文小写+下划线命名(如
4. 修正代码中的路径问题
- Assets文件读取使用相对路径,不要以
/开头:
错误写法:assets.open("/Injector.js")
正确写法:assets.open("Injector.js") - 添加异常捕获,定位具体错误:
通过日志中的异常信息(如try { assets.open("Injector.js").bufferedReader().use { Log.d("Test", it.readText()) } } catch (e: Exception) { Log.e("Test", "读取Assets文件失败", e) }FileNotFoundException)快速定位问题。
5. 调试环境排查
- 切换Android Studio视图到
Android模式,确认assets目录和文件的实际位置(Project视图可能显示虚拟目录结构,与实际打包逻辑不符)。 - 真机测试时,卸载旧版APP后重新安装;模拟器测试可清除APP数据或重启模拟器,避免缓存干扰。
内容的提问来源于stack exchange,提问作者kabr8
相关产品推荐
相关产品推荐

