Android 14下无法清除预置SQLite数据库文件问题求助
解决方案
1. 关闭/清除Android 14自动备份
Android 14默认自动备份应用数据(含Documents目录下的数据库),卸载后重装会自动恢复备份数据:
- 临时禁用备份:在
AndroidManifest.xml中添加android:allowBackup="false",或在res/xml/backup_rules.xml配置排除目标数据库文件; - 手动清除系统备份:进入Pixel设备「设置」>「系统」>「备份」>「查看已备份的数据」,找到你的应用并删除对应备份条目。
2. 用ADB彻底清除应用残留
通过ADB命令强制清理并卸载,避免系统残留:
adb shell pm clear <你的应用包名> adb uninstall <你的应用包名>
执行完成后再重新部署应用。
3. 修复数据库初始化逻辑
检查应用初始化代码,确保能覆盖旧数据库:
- 加入版本判断,当数据库结构更新时强制复制新预置库:
const DB_VERSION = 2; // 更新为新结构对应的版本号 var DBPath: string; VersionPath: string; begin DBPath := TPath.Combine(TPath.GetDocumentsPath, <DatabaseName>); VersionPath := TPath.Combine(TPath.GetDocumentsPath, 'db_version.txt'); // 不存在数据库/版本不匹配时,覆盖复制新库 if not TFile.Exists(DBPath) or (TFile.ReadAllText(VersionPath) <> IntToStr(DB_VERSION)) then begin TFile.Copy(TPath.Combine(TPath.GetAssetsPath, 'internal\<DatabaseName>'), DBPath, True); TFile.WriteAllText(VersionPath, IntToStr(DB_VERSION)); end; Connection.Params.Values['Database'] := DBPath; end;
- 确保复制时使用
True参数覆盖已存在的旧文件。
4. 排查Pixel设备特殊存储残留
- 检查是否开启「应用分身」或「工作资料」,若有则一并卸载对应实例;
- 重启设备后再尝试重新部署,清除存储框架缓存。
5. 验证Delphi部署配置
- 确认
.\assets\internal下的数据库文件确实是修改后的新版本,检查文件修改时间和内容; - 在Delphi项目管理器的「部署」选项中,确保该数据库文件的「覆盖现有文件」选项已勾选。
内容的提问来源于stack exchange,提问作者fisi-pjm
相关产品推荐
相关产品推荐

