2012-03-20 4 views
2

Я использую sql-шифр (sql cipher for android) в своем приложении, и он хорошо работает с планшетами Android, а также с версией выше android 2.3. Но это приводит к сбоям в версии Android версии 2.2. Кто-нибудь знает об этом проблема и если да, то пожалуйста, дайте мне solution.I включили журнал аварийногомое приложение вылетает при использовании sql-шифрования

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 (родной метод) 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): at android.view.View.performClick (View.java:2408) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): at android.view.View $ PerformClick.run (View.java:8818) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): at android.os.Handler.handleCallback (Handler.java: 587) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): at android.os.Handler.dispatchMessage (Handler.jav a: 92) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): at android.os.Looper.loop (Looper.java:123) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): at android.app.ActivityThread.main (ActivityThread.java:4627) 03-24 05: 04: 26.440: E/AndroidRuntime (15069): при java.lang.reflect.Method.invokeNative (собственный метод) 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 (родной метод)

ответ

3

SQLCipher для Android зависит от данных локализации от проекта ICU. На платформе Android версии 2.3 и выше SQLCipher для Android будет пытаться использовать предоставленные системой данные локализации ICU. Если вы пытаетесь использовать SQLCipher для Android на поддерживаемой платформе ниже 2.3, активы/icudt44l.zip должны быть включены в ваше приложение в качестве зависимости.

из https://github.com/sqlcipher/android-database-sqlcipher/issues/30

Вы можете получить этот почтовый файл непосредственно в https://github.com/sqlcipher/android-database-sqlcipher/raw/master/assets/icudt46l.zip, если вы не имеете его в вашей установке SQLCipher

+0

Я включил icudt44l.zip в папку с ресурсами .but crash все еще существует .did Мне нужно сделать любой дополнительный код после включения icudt44l.zip в папку с ресурсами? – Sujiz

+0

Вы хотите сказать icudt46l.zip? Также вы следовали за README - тот, что в версии 1.1.0 выглядит хорошо. – louielouie

+0

@ louielouie Я просто копирую и вставляю icudt44l.zip в папку с ресурсами, это достаточно? или мне нужна дополнительная работа после этого? – Sujiz

1

Один любопытной вещи, которую я обнаружил в этом вопросе. Как подробно описано в этой статье: http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ версии под Android 2.3 не могут прочитать файл icudt46l.zip, так как он больше, чем 1mb. Решение заключается в том, чтобы сказать aapt (или proguard, если вы его используете), чтобы не сжимать .zip-файлы.

Смежные вопросы