Flutter中SQLite部分字段未保存,如何查看数据库及导出一加8T上的db文件
一加8T真机导出Flutter应用SQLite数据库文件方案
你在界面上看不到数据库路径是因为安卓11及以上的沙箱权限限制,第三方应用和系统文件管理器无法直接访问应用私有目录,不代表代码中无法读取该路径,可通过以下三种方案导出文件:
方案1:ADB调试模式直接拉取(无需Root,仅支持调试版应用)
- 开启一加8T的USB调试:设置-关于手机-连续点击版本号开启开发者模式,返回设置进入开发者选项,依次开启USB调试、USB安装、USB调试(安全设置)三个开关
- 电脑端安装Android SDK平台工具,确保adb命令可用,手机通过USB连接电脑选择「文件传输(MTP)」模式,终端运行
adb devices确认设备已正常连接 - 运行Flutter调试版应用到真机,如果你不知道数据库文件名,先执行以下命令列出应用所有数据库文件:
adb shell run-as 你的应用包名 ls databases/
- 执行拉取命令导出数据库到电脑本地,替换命令中包名、数据库名、本地路径参数即可:
adb exec-out run-as 你的应用包名 cat databases/你的数据库文件名.db > 本地存储路径/导出文件名.db
方案2:应用内主动导出到公共存储(支持调试/Release版,无需Root)
- Flutter端引入
permission_handler包,申请存储权限:安卓11及以上申请MANAGE_EXTERNAL_STORAGE权限,安卓13及以上申请文件访问权限 - 引入
path_provider包,调用getDatabasesPath()方法直接获取数据库文件的私有存储路径,无需在界面展示路径 - 编写文件复制逻辑,将私有目录下的数据库文件复制到公共下载目录,复制完成后可直接在手机的「下载」文件夹中找到数据库文件,传输到电脑即可查看
方案3:Root设备后直接访问(仅适合已Root设备)
- 如果你的一加8T已经完成Root,可直接用RE文件管理器等工具进入
/data/data/你的应用包名/databases/目录,直接复制数据库文件到公共存储即可
注意:一加系统的权限管控较严格,如果执行adb拉取时出现Permission denied报错,先确认当前运行的是Debug版应用(Release版默认禁止run-as命令访问私有目录),同时确认开发者选项里的「USB调试(安全设置)」已经开启,该开关未开启会拦截大部分adb调试操作。
内容的提问来源于stack exchange,提问作者uday
相关产品推荐
相关产品推荐

