2

我在我的应用程序中使用 sql cipher(用于 android的 sql cipher ),它适用于 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): 在 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): 在 info.guardianproject.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:863) 03-24 05:04:26.440: E/AndroidRuntime(15069): 在 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): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 03-24 05:04:26.440: E/AndroidRuntime( 15069):在 dalvik.system.NativeStart.main(本机方法)

4

2 回答 2

3

SQLCipher for Android 依赖于来自 ICU 项目的本地化数据。在 Android 平台版本 2.3 及更高版本上,Android 的 SQLCipher 将尝试使用系统提供的 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 文件

于 2012-03-20T06:43:30.670 回答
1

我在这件事上发现了一件奇怪的事情。如本文所述:http : //ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ Android 2.3 以下的版本无法读取 icudt46l.zip 文件。大于 1mb。解决方案是告诉 aapt(或者你应该使用它的 proguard)不要压缩任何 .zip 文件。

于 2012-08-20T00:00:43.223 回答