0

我正在尝试将 sqlcipher 从版本 1.1 更新到 2.2.2。新版本的 sqlcipher 在全新安装或我从 Eclipse 运行时运行良好。但是,当我用新的 v2.2.2 更新以前使用 v1.1 sqlcipher 的应用程序时,该库无法正确加载。当我调用 SQLiteDatabase.loadLibs(this) 时,应用程序崩溃。我在 logcat 中得到以下信息

09-11 11:21:56.887: I/Database(26277): JNI_OnLoad 调用

09-11 11:21:56.887: I/Database(26277): JNI_OnLoad 寄存器方法

09-11 11:21:56.887: E/Database(26277): 找不到 SQLiteDatabase.mNativeHandle

09-11 11:21:56.887: E/Cursor(26277): 找不到网络/sqlcipher/database/SQLiteCompiledSql

09-11 11:21:56.887: E/Cursor(26277): 找不到网络/sqlcipher/database/SQLiteQuery

09-11 11:21:56.887: E/Cursor(26277): 找不到网络/sqlcipher/database/SQLiteProgram

09-11 11:21:56.887: E/Cursor(26277): 找不到网络/sqlcipher/database/SQLiteStatement

09-11 11:21:56.887: E/CursorWindow(26277): 找不到网络/sqlcipher/CursorWindow

09-11 11:21:56.903: W/dalvikvm(26277): threadid=11: 线程以未捕获的异常退出 (group=0x40b73930)

更新:我正在使用 proguard。当我关闭 proguard 时,SQLiteDatabase.loadLibs(this) 工作正常。但是这次我无法打开加密的数据库。我正在传递相同的正确密码来打开数据库。

09-11 14:21:48.950: I/Database(31543): sqlite 返回:错误代码 = 26,msg = 文件已加密或不是数据库

09-11 14:21:48.950:E/数据库(31543):创建表 android_metadata 失败

09-11 14:21:48.965: E/Database(31543): 构造时 setLocale() 失败,关闭数据库

09-11 14:21:48.965: E/Database(31543): net.sqlcipher.database.SQLiteException: 文件已加密或不是数据库

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2102)

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteDatabase.(SQLiteDatabase.java:1968)

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:901)

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:944)

09-11 14:21:48.965: E/Database(31543): at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:107)

09-11 14:21:48.965: E/Database(31543): at alc.rhapsody.mdd.database.DatabaseAdapter.openDatabase(DatabaseAdapter.java:234)

09-11 14:21:48.965: E/Database(31543): at alc.rhapsody.mdd.presenter.SplashViewPresenter.getAdmissionAccess(SplashViewPresenter.java:152)

09-11 14:21:48.965: E/Database(31543): at alc.rhapsody.mdd.presenter.SplashViewPresenter.access$2(SplashViewPresenter.java:99)

09-11 14:21:48.965: E/Database(31543): at alc.rhapsody.mdd.presenter.SplashViewPresenter$AdmissionCtrl.doInBackground(SplashViewPresenter.java:235)

09-11 14:21:48.965: E/Database(31543): at alc.rhapsody.mdd.presenter.SplashViewPresenter$AdmissionCtrl.doInBackground(SplashViewPresenter.java:1)

09-11 14:21:48.965: E/Database(31543): 在 android.os.AsyncTask$2.call(AsyncTask.java:287)

09-11 14:21:48.965: E/Database(31543): at java.util.concurrent.FutureTask.run(FutureTask.java:234)

09-11 14:21:48.965: E/Database(31543): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)

09-11 14:21:48.965: E/Database(31543): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)

09-11 14:21:48.965: E/Database(31543): at java.lang.Thread.run(Thread.java:856)

4

1 回答 1

0

你是否为文件提供密码,似乎你没有提供数据库,并且在标志中使用 NO_LOCALIZED_COLLATORS

于 2013-10-01T05:05:37.283 回答