apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件
apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件
测试过的手机:
华为手机mate20,荣耀30
操作步骤:
- 创建项目
- 创建_doc目录
- 将sqlite db文件保存至_doc目录
- 云打包后至手机安装
预期结果:
安装完成后,项目的_doc目录下会有sqlite db文件
实际结果:
安装完成后,项目的_doc目录下没有sqlite db文件
bug描述:
apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件。 由于我们需要对DB进行读和写操作,放至static目录下因只读无法满足我们的需求。
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.8.12 |
手机系统 | 全部 |
手机机型 | mate20 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
2 回复
哈哈,哪位大老,帮忙解答下呀,非常感谢!
这个问题是由于云打包时_doc目录下的文件没有被正确打包进APK导致的。解决方法如下:
-
确保.db文件放在项目的nativeplugins目录下,而不是直接放在_doc目录。云打包不会自动包含_doc目录中的文件。
-
在manifest.json中配置需要打包的资源文件:
"app-plus": {
"distribute": {
"android": {
"assets": {
"data": ["_doc/*.db"]
}
}
}
}
- 更好的做法是使用uni-app的文件API动态创建和复制数据库文件:
// 安装时检查并复制数据库
const dbPath = plus.io.convertLocalFileSystemURL('_doc/test.db');
plus.io.resolveLocalFileSystemURL(dbPath, () => {
console.log('数据库已存在');
}, async () => {
// 从static目录复制
const res = await uni.downloadFile({
url: '/static/test.db'
});
await uni.saveFile({
tempFilePath: res.tempFilePath,
filePath: dbPath
});
});