手机升级到P版本后,很多海外APP报数据库table找不到的错误

问题描述


安装某三方应用后,启动应用,应用crash. crash log中出现如下类似LOG:
SQLite: No Such Table Error' after copying database from assets
android.database.sqlite.SQLiteException: no such table: xxxxxxxx
crash不一定是报在数据库中,可能是某个逻辑报空指针异常之类的。
但这类问题很可能是因为数据库中查不到数据,导致了空指针异常。

 

解决方案


出现问题的原因是这类APP创建数据库是用APP的asset目录下copy数据库文件到databases目录下,
而这类数据库如果被用WAL mode打开,就会被数据回滚成只有一个meta表,导致其他表都不存在,
下面这个highlight的位置的修改导致P版本如果没设置SQLiteDatabase.DISABLE_COMPATIBILITY_WAL 这个FLAG
都会默认走WAL mode, 而许多三方APP都没设置这个FLAG导致安装到P版本就会有问题 。

 

正解 应该是通知三方APP 在openDatabase的时候都加上这个FLAG  DISABLE_COMPATIBILITY_WAL,因为下面的代码会让APP
默认走WAL mode.

 

前面修改framework代码的解法如果不带白名单修改,就会导致APP 默认都走 FULL mode, full mode在写数据库方面
性能是要比 WAL mode 差一些。

作者: RESSRC

个人资源站

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据