我有一个应用程序apk,并且与Android 9不兼容,因为它现在强制使用WAL而不是日记模式。有没有一种方法可以在不访问应用程序源代码的情况下禁用WAL?
答案 0 :(得分:2)
如果您无法控制应用程序的来源,那么我不认为您可以更改模式。
说,最有可能导致该应用无法正常工作的原因是使用了预先存在的数据库(从资产文件夹复制)。
如果是这样,则您可以访问该应用正在运行的另一台设备(即低于Android 9),并且可以访问数据库文件(可能需要有根设备)。在删除Android 9设备上的-shm和-wal文件之后(同样可能需要植根),很有可能从数据库中复制数据库文件(尽管可能会使用WAL),但问题是很可能纯粹是复制现有数据库。
但是,如果您确实有权访问代码:-
您可以使用SQLiteDatabase disableWriteAheadLogging方法。如果使用SQLiteOpenHelper的子类,则可以通过覆盖 onConfigure 方法来执行此操作。
如果不使用SQLiteOpenHelper的子类,则可以使用journal_mode PRAGMA设置日记模式。