如何将XML序列化文件打包入APK并自动存入应用私有files目录
可行实现方案
方案1:assets目录存储+按需拷贝到私有files目录
这个方案完全匹配你想要安装后文件存入getFilesDir()的需求:
- 在Android Studio项目的
src/main路径下新建assets文件夹(如果已存在可跳过),将所有你生成的XML文件放入该文件夹 - 应用首次启动时,执行assets文件拷贝逻辑,将目标XML文件写入私有files目录,已拷贝过的文件可以跳过避免重复操作
- 拷贝完成后,你可以直接从
getFilesDir()读取XML文件的File实例,传入Simple XML的解析接口即可完成反序列化
拷贝逻辑参考代码(Kotlin):
fun copyXmlFromAssetsToFiles() { val assetFileList = assets.list("")?.filter { it.endsWith(".xml") } ?: return assetFileList.forEach { xmlName -> val targetFile = File(filesDir, xmlName) if (targetFile.exists()) return@forEach assets.open(xmlName).use { input -> targetFile.outputStream().use { output -> input.copyTo(output) } } } }
方案2:直接从assets读取流解析(无需拷贝)
如果你不需要修改这些XML文件的内容,完全可以不拷贝到files目录,直接读取assets的输入流传给Simple XML即可,性能更好:
val serializer = Persister() // 直接打开assets下的XML文件输入流 val xmlInputStream = assets.open("your_custom_data.xml") val dataInstance = serializer.read(YourCustomClass::class.java, xmlInputStream) xmlInputStream.close()
补充说明
你之前的设计选择没有问题,Android的res目录下的资源会被编译成系统优化的二进制格式,所以只能用安卓自带的解析器读取,而assets目录本来就是用来存放不需要编译的原始文件的场景,完全适配你的需求。
内容的提问来源于stack exchange,提问作者Harmen
相关产品推荐
相关产品推荐

