apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件

apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件

测试过的手机:

华为手机mate20,荣耀30

操作步骤:

  1. 创建项目
  2. 创建_doc目录
  3. 将sqlite db文件保存至_doc目录
  4. 云打包后至手机安装

预期结果:

安装完成后,项目的_doc目录下会有sqlite db文件

实际结果:

安装完成后,项目的_doc目录下没有sqlite db文件

bug描述:

apk云打包后安装,_doc目录下准备的sqlite的.db文件,安装完成后,项目的_doc目录下没有sqlite db文件。 由于我们需要对DB进行读和写操作,放至static目录下因只读无法满足我们的需求。

Image

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 win10
HBuilderX类型 正式
HBuilderX版本 3.8.12
手机系统 全部
手机机型 mate20
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

哈哈,哪位大老,帮忙解答下呀,非常感谢!


这个问题是由于云打包时_doc目录下的文件没有被正确打包进APK导致的。解决方法如下:

  1. 确保.db文件放在项目的nativeplugins目录下,而不是直接放在_doc目录。云打包不会自动包含_doc目录中的文件。

  2. 在manifest.json中配置需要打包的资源文件:

"app-plus": {
  "distribute": {
    "android": {
      "assets": {
        "data": ["_doc/*.db"]
      }
    }
  }
}
  1. 更好的做法是使用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
  });
});
回到顶部