我们刚刚迁移了我们的应用程序以使用应用程序包 (aab) 而不是 apk。在测试过程中没有发现任何问题,但是当我们真正交付给用户时,我们开始收到奇怪的崩溃报告。
SQLite 似乎存在一些内部问题:
java.lang.RuntimeException:
at androidx.room.RoomTrackingLiveData$1.run (RoomTrackingLiveData.java:92)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:923)
Caused by: net.sqlcipher.database.SQLiteException:
at net.sqlcipher.database.SQLiteCompiledSql.native_compile (Native Method)
at net.sqlcipher.database.SQLiteCompiledSql.compile (SQLiteCompiledSql.java:89)
at net.sqlcipher.database.SQLiteCompiledSql.<init> (SQLiteCompiledSql.java:62)
at net.sqlcipher.database.SQLiteProgram.<init> (SQLiteProgram.java:91)
at net.sqlcipher.database.SQLiteQuery.<init> (SQLiteQuery.java:48)
at net.sqlcipher.database.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:60)
at net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:2016)
at net.sqlcipher.database.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1902)
at net.sqlcipher.database.SQLiteDatabase.keyDatabase (SQLiteDatabase.java:2669)
at net.sqlcipher.database.SQLiteDatabase.openDatabaseInternal (SQLiteDatabase.java:2599)
at net.sqlcipher.database.SQLiteDatabase.openDatabase (SQLiteDatabase.java:1247)
at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase (SQLiteDatabase.java:1322)
at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:166)
如果清除数据库或卸载应用程序然后重新安装,则不再重现该问题。
您认为这可能与 apk 到 aab 的迁移有关吗?有没有人遇到过这样的事情?
我试图在网上搜索类似的问题,但到目前为止我还没有发现任何类似的问题。
我打算尝试以下选项来解决这个问题:
- 增加数据库版本并回退到特定版本的破坏性迁移,以重新创建手动解决问题的“清除数据”方法。
- 尝试使用 Google 的新侧载逻辑。基本上,它会在应用程序启动时检测到缺少的必需组件并提示用户重新安装。它不漂亮,但总比崩溃好。我对这种方法有点怀疑,因为我们没有收到任何
LinkageError
s 或ResourceNotFound
错误,但我别无选择。