android - 为我没有源代码的应用程序禁用 WAL?

标签 android sqlite

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

最佳答案

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

也就是说,应用程序无法运行的最可能原因是使用了预先存在的数据库(从 Assets 文件夹中复制)。

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

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

但是,如果您确实有权访问代码:-

您可以使用 SQLite 数据库 disableWriteAheadLogging方法。如果使用 SQLiteOpenHelper 的子类,您将通过覆盖 onConfigure 方法来执行它。

如果不使用 SQLiteOpenHelper 的子类,那么您可以使用 journal_mode 设置日志模式编译指示。

关于android - 为我没有源代码的应用程序禁用 WAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434564/

相关文章:

sql - 如何使用 SQL 为每个部分键选择一条记录

android - LocationManager.requestLocationUpdates 添加或更新?

java - 我如何在首选项中执行 "sub-categories"

c# - 通过网络连接到 SQLite 数据库

java - android.database.sqlite.SQLiteDatatypeMismatchException : datatype mismatch (code 20)

Android SQLite 到我的 MySQL Web 服务器?

java - Android 在打开浏览器之前从 http 链接收集信息

android - 远程登录教程

android - 如何设置 Android AppBar 操作文本的样式?

创建表时出现 Android SQLite 错误