sqlcipher 加密数据库问题3

1、加密数据库sqlcipher 2.1 (大约),运行在android4.4 报错

(1)

09-04 05:15:59.627: E/dalvikvm(1444): dlopen("/data/app-lib/com.glenet.hm-1/libdatabase_sqlcipher.so") failed: dlopen failed: library "/system/lib/libhoudini.so" not found
09-04 05:15:59.647: E/AndroidRuntime(1444): FATAL EXCEPTION: main
09-04 05:15:59.647: E/AndroidRuntime(1444): Process: com.glenet.hm, PID: 1444
09-04 05:15:59.647: E/AndroidRuntime(1444): java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libhoudini.so" not found
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at java.lang.Runtime.loadLibrary(Runtime.java:364)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at java.lang.System.loadLibrary(System.java:526)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:143)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:80)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.app.ActivityThread.access$1500(ActivityThread.java:135)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.os.Handler.dispatchMessage(Handler.java:102)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.os.Looper.loop(Looper.java:136)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at java.lang.reflect.Method.invoke(Method.java:515)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
09-04 05:15:59.647: E/AndroidRuntime(1444): 	at dalvik.system.NativeStart.main(Native Method)

(2)红米1s 等


09-09 13:34:02.665: E/dalvikvm(7536): dlopen("/data/app-lib/com.glenet.hm-1/libdatabase_sqlcipher.so") failed: dlopen failed: cannot locate symbol "_ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElj" referenced by "libdatabase_sqlcipher.so"...
09-09 13:34:02.668: E/AndroidRuntime(7536): FATAL EXCEPTION: main
09-09 13:34:02.668: E/AndroidRuntime(7536): Process: com.glenet.hm, PID: 7536
09-09 13:34:02.668: E/AndroidRuntime(7536): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElj" referenced by "libdatabase_sqlcipher.so"...
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at java.lang.Runtime.loadLibrary(Runtime.java:371)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at java.lang.System.loadLibrary(System.java:531)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:143)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at com.lbe.security.service.core.client.b.x.callApplicationOnCreate(Unknown Source)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4564)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.app.ActivityThread.access$1500(ActivityThread.java:151)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1402)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.os.Handler.dispatchMessage(Handler.java:110)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.os.Looper.loop(Looper.java:193)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at android.app.ActivityThread.main(ActivityThread.java:5315)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at java.lang.reflect.Method.invoke(Method.java:515)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660)
09-09 13:34:02.668: E/AndroidRuntime(7536): 	at dalvik.system.NativeStart.main(Native Method)



解决:

升级数据库, 2.2.2及以上版本

建议升级到2.2.2 ,因为3.1 与2.x 不是完美兼容,

若从2.x升级到到3.x 读取数据库会报错哦,见下方


2、程序使用sqlcipher2.2 升级到 3.1 ,程序安装后 打开会报错

同样,从3.1降级到2.2 也会报错


09-04 12:24:25.010: E/lights(2773): write_int: path /sys/devices/virtual/misc/melfas_touchkey/brightness, value 1
09-04 12:24:26.020: E/Database(3612): CREATE TABLE android_metadata failed
09-04 12:24:26.020: E/Database(3612): Failed to setLocale() when constructing, closing the database
09-04 12:24:26.020: E/Database(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:907)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
09-04 12:24:26.020: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:26.020: E/Database(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:26.020: E/Database(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:26.020: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:144)
09-04 12:24:26.020: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:26.020: E/Database(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:26.020: E/Database(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:26.020: E/Database(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:26.020: E/Database(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:26.020: E/Database(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:26.020: E/Database(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:26.020: E/Database(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:26.020: E/Database(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:26.020: E/Database(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:26.020: E/Database(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:26.020: E/Database(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:26.020: E/Database(3612): 	at dalvik.system.NativeStart.main(Native Method)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): Couldn't open hm.db for writing (will try read-only):
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:907)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:144)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:26.025: E/SQLiteOpenHelper(3612): 	at dalvik.system.NativeStart.main(Native Method)
09-04 12:24:26.550: E/lights(2773): write_int: path /sys/devices/virtual/misc/melfas_touchkey/brightness, value 2
09-04 12:24:26.600: E/Database(3612): CREATE TABLE android_metadata failed
09-04 12:24:26.610: E/Database(3612): Failed to setLocale() when constructing, closing the database
09-04 12:24:26.610: E/Database(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:934)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:219)
09-04 12:24:26.610: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:26.610: E/Database(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:26.610: E/Database(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:26.610: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:144)
09-04 12:24:26.610: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:26.610: E/Database(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:26.610: E/Database(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:26.610: E/Database(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:26.610: E/Database(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:26.610: E/Database(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:26.610: E/Database(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:26.610: E/Database(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:26.610: E/Database(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:26.610: E/Database(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:26.610: E/Database(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:26.610: E/Database(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:26.610: E/Database(3612): 	at dalvik.system.NativeStart.main(Native Method)
09-04 12:24:27.190: E/Database(3612): CREATE TABLE android_metadata failed
09-04 12:24:27.190: E/Database(3612): Failed to setLocale() when constructing, closing the database
09-04 12:24:27.190: E/Database(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:907)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
09-04 12:24:27.190: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:27.190: E/Database(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:27.190: E/Database(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:27.190: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:146)
09-04 12:24:27.190: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:27.190: E/Database(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:27.190: E/Database(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:27.190: E/Database(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:27.190: E/Database(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:27.190: E/Database(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:27.190: E/Database(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:27.190: E/Database(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:27.190: E/Database(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:27.190: E/Database(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:27.190: E/Database(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:27.190: E/Database(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:27.190: E/Database(3612): 	at dalvik.system.NativeStart.main(Native Method)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): Couldn't open hm.db for writing (will try read-only):
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:907)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:146)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:27.195: E/SQLiteOpenHelper(3612): 	at dalvik.system.NativeStart.main(Native Method)
09-04 12:24:27.740: E/Database(3612): CREATE TABLE android_metadata failed
09-04 12:24:27.740: E/Database(3612): Failed to setLocale() when constructing, closing the database
09-04 12:24:27.740: E/Database(3612): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.native_setLocale(Native Method)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.setLocale(SQLiteDatabase.java:2092)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1958)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:875)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:934)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:219)
09-04 12:24:27.740: E/Database(3612): 	at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:184)
09-04 12:24:27.740: E/Database(3612): 	at com.glenet.hm.sqlite.HmAppDbHelper.getReadableDatabase(HmAppDbHelper.java:77)
09-04 12:24:27.740: E/Database(3612): 	at com.glenet.hm.sqlite.DbTableIsExist.tabbleIsExist(DbTableIsExist.java:22)
09-04 12:24:27.740: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.initTable(HmApplication.java:146)
09-04 12:24:27.740: E/Database(3612): 	at com.glenet.hm.sys.HmApplication.onCreate(HmApplication.java:83)
09-04 12:24:27.740: E/Database(3612): 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:972)
09-04 12:24:27.740: E/Database(3612): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3280)
09-04 12:24:27.740: E/Database(3612): 	at android.app.ActivityThread.access$2200(ActivityThread.java:117)
09-04 12:24:27.740: E/Database(3612): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
09-04 12:24:27.740: E/Database(3612): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 12:24:27.740: E/Database(3612): 	at android.os.Looper.loop(Looper.java:130)
09-04 12:24:27.740: E/Database(3612): 	at android.app.ActivityThread.main(ActivityThread.java:3691)
09-04 12:24:27.740: E/Database(3612): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-04 12:24:27.740: E/Database(3612): 	at java.lang.reflect.Method.invoke(Method.java:507)
09-04 12:24:27.740: E/Database(3612): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-04 12:24:27.740: E/Database(3612): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-04 12:24:27.740: E/Database(3612): 	at dalvik.system.NativeStart.main(Native Method)


解决(未完善):


http://stackoverflow.com/questions/20614096/android-sqlchipher-net-sqlcipher-database-sqliteexception-file-is-encrypted-or


https://www.zetetic.net/blog/2013/11/11/sqlcipher-300-release.html


https://www.zetetic.net/sqlcipher/sqlcipher-api/


The same thing has happened to me and it is because after the update of the SQLCipher library i also needed to upgrade the database from the version 1.1.x i was using to 2.2.2. See here why. To do that you need to use the SQLiteDatabase.upgradeDatabaseFormatFromVersion1To2(File dbPath, String key). The problem is that this method does not preserve the db version so we need to do that manually. So the code will be like this:

 //Open the old formatted db with cipher_use_hmac = OFF;
 SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {

     public void preKey(SQLiteDatabase database) {}

     public void postKey(SQLiteDatabase database) {
         database.rawExecSQL("PRAGMA cipher_use_hmac = OFF;");
     }
 };

 //Read the db version
 SQLiteDatabase old_db = SQLiteDatabase.openOrCreateDatabase(path, mPassword, mFactory, hook);
 int version = old_db.getVersion();
 old_db.close();

 //Do the upgrade to 2.x format
 try {
     SQLiteDatabase.upgradeDatabaseFormatFromVersion1To2(new File(path), mPassword);
 } catch (Exception e) {
     e.printStackTrace();
 }

//Manually set the db version to the updated db.
SQLiteDatabase updated_db = SQLiteDatabase.openOrCreateDatabase(path, mPassword, mFactory);
updated_db.setVersion(version);

The above code will permanently update the SQLCipher database format to 2.2.2 version. If you want to update to the new 3.x format, the process is different and you need to use the PRAGMA cipher_migrate method (See here). I avoided the 3.x format because the default KDF iteration count is 64000 (up from 4000) which was making the readings/writings to the database quite slow. The 2.2.2 version is compatible with KitKat.


3、附下载地址


2.2.2 包含so库

https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v2.2.2.zip 

2.2.2 源码,不含二进制文件

https://github.com/sqlcipher/android-database-sqlcipher/archive/v2.2.2.zip

3.1包含so库

https://s3.amazonaws.com/sqlcipher/SQLCipher+for+Android+v3.1.0.zip

3.1 源码,不含二进制文件

https://github.com/sqlcipher/android-database-sqlcipher/archive/v3.1.0.zip


所有版本-源码,不含二进制文件

https://github.com/sqlcipher/android-database-sqlcipher/releases



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值