android - 为我没有源代码的应用禁用 WAL?
问题描述
我有一个应用程序的 apk,并且与 Android 9 不兼容,因为它现在强制使用 WAL 而不是日志模式。有没有办法在不访问应用程序源代码的情况下禁用 WAL?
解决方案
如果您无法控制 App 的来源,那么我不相信您可以更改模式。
话虽如此,应用程序无法正常工作的最可能原因是使用了预先存在的数据库(从资产文件夹复制)。
如果是这样,并且您可以访问该应用程序正在运行的另一台设备(即低于 Android 9)并且您可以访问数据库文件(可能需要有根设备)。很有可能在删除 Android 9 设备上的 -shm 和 -wal 文件后复制该数据库文件(同样它可能需要被植根)会起作用(尽管会使用 WAL),但问题是很可能纯粹是复制现有数据库。
- 我使用 5.0 和 10.0 设备(模拟器)进行了测试,效果很好。
但是,如果您确实可以访问代码:-
您可以使用 SQLiteDatabase disableWriteAheadLogging方法。如果使用 SQLiteOpenHelper 的子类,您将通过覆盖onConfigure方法来执行此操作。
如果不使用 SQLiteOpenHelper 的子类,则可以使用journal_mode PRAGMA 设置日志模式。
推荐阅读
- c# - Azure 应用服务连接超时问题
- azure-active-directory - 在 Azure AD 中,授予来宾邀请者将被邀请者添加到组所需的最低权限是什么?
- python - 如何比较两个json文件并打印差异报告
- python - ImportError:没有名为 Cloudant 的模块
- azure-devops - Azure DevOps 发布管道,生产阶段权限防止更改整个管道
- r - Rstudio 中缺少数据
- javascript - 如何从javascript中的对象数组中提取特定属性(即键/值)?
- windows - Docker Toolbox 默认磁盘太小
- javascript - Photoshop Javascript 转到下一层(上面的层)
- sql - (甲骨文)提前 30 天获取