首页 > 解决方案 > 为我没有源代码的应用禁用 WAL?

问题描述

我有一个应用程序的 apk,并且与 Android 9 不兼容,因为它现在强制使用 WAL 而不是日志模式。有没有办法在不访问应用程序源代码的情况下禁用 WAL?

标签: androidsqlite

解决方案


如果您无法控制 App 的来源,那么我不相信您可以更改模式。

话虽如此,应用程序无法正常工作的最可能原因是使用了预先存在的数据库(从资产文件夹复制)。

如果是这样,并且您可以访问该应用程序正在运行的另一台设备(即低于 Android 9)并且您可以访问数据库文件(可能需要有根设备)。很有可能在删除 Android 9 设备上的 -shm 和 -wal 文件后复制该数据库文件(同样它可能需要被植根)会起作用(尽管会使用 WAL),但问题是很可能纯粹是复制现有数据库。

  • 我使用 5.0 和 10.0 设备(模拟器)进行了测试,效果很好。

但是,如果您确实可以访问代码:-

您可以使用 SQLiteDatabase disableWriteAheadLogging方法。如果使用 SQLiteOpenHelper 的子类,您将通过覆盖onConfigure方法来执行此操作。

如果不使用 SQLiteOpenHelper 的子类,则可以使用journal_mode PRAGMA 设置日志模式。


推荐阅读