我在我的应用程序中使用sql cipher(sql cipher for android)并且它与Android平板电脑以及Android 2.3以上版本一起使用。但它在Android 2.2版本中崩溃。可以任何人知道这个问题,如果是的,请给我一个解决方案。我已经包含了崩溃日志
03-24 05:04:26.440:E / AndroidRuntime(15069):致命异常:主要 03-24 05:04:26.440:E / AndroidRuntime(15069):info.guardianproject.database.sqlcipher.SQLiteException:不是错误 03-24 05:04:26.440:E / AndroidRuntime(15069):at info.guardianproject.database.sqlcipher.SQLiteDatabase.dbopen(Native Method) 03-24 05:04:26.440:E / AndroidRuntime(15069):在info.guardianproject.database.sqlcipher.SQLiteDatabase。(SQLiteDatabase.java:1870) 03-24 05:04:26.440:E / AndroidRuntime(15069):at info.guardianproject.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:863) 03-24 05:04:26.440:E / AndroidRuntime(15069):at info.guardianproject.database.sqlcipher.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:183) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.view.View.performClick(View.java:2408) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.view.View $ PerformClick.run(View.java:8818) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.os.Handler.handleCallback(Handler.java:587) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.os.Handler.dispatchMessage(Handler.java:92) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.os.Looper.loop(Looper.java:123) 03-24 05:04:26.440:E / AndroidRuntime(15069):在android.app.ActivityThread.main(ActivityThread.java:4627) 03-24 05:04:26.440:E / AndroidRuntime(15069):at java.lang.reflect.Method.invokeNative(Native Method) 03-24 05:04:26.440:E / AndroidRuntime(15069):at java.lang.reflect.Method.invoke(Method.java:521) 03-24 05:04:26.440:E / AndroidRuntime(15069):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:871) 03-24 05:04:26.440:E / AndroidRuntime(15069):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 03-24 05:04:26.440:E / AndroidRuntime(15069):at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:3)
Android的SQLCipher依赖于ICU项目的本地化数据。在Android平台2.3及以上版本的SQLCipher for Android将尝试使用系统提供的ICU本地化数据。如果您尝试在2.3以下的受支持平台上使用SQLCipher for Android,则assets / icudt44l.zip需要作为依赖项包含在您的应用程序中。
来自https://github.com/sqlcipher/android-database-sqlcipher/issues/30
如果您在SQLCipher安装中没有该文件,可以直接在https://github.com/sqlcipher/android-database-sqlcipher/raw/master/assets/icudt46l.zip获取该zip文件
答案 1 :(得分:1)
我在这件事上发现了一个奇怪的事情。如本文所述:Android 2.3下面的http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/版本无法读取icudt46l.zip文件,因为它大于1mb。解决方案是告诉aapt(或者你是否应该使用它)不要压缩任何.zip文件。