2016-03-09 2 views
2

Я использую SQLCipher в проекте android. Все хорошо работает в тестировании, но всякий раз, когда я построил подписанный релиз APK и установил его я получаю следующее сообщение об ошибке и аварии всякий раз, когда я называюSQLCipher вызывает сбои на Android в подписанной версии APK

SQLCipher.loadLibs(context); 

Вот авария

03-09 14:47:45.833 24895-24895/? E/Database: Can't find SQLiteDatabase.mNativeHandle 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] No pending exception expected: java.lang.NoSuchFieldError: no "I" field "mNativeHandle" in class "Lnet/sqlcipher/database/SQLiteDatabase;" or its superclasses 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String) (Runtime.java:-2) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at java.lang.String java.lang.Runtime.doLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:428) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void java.lang.Runtime.loadLibrary(java.lang.String, java.lang.ClassLoader) (Runtime.java:369) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void java.lang.System.loadLibrary(java.lang.String) (System.java:988) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void net.sqlcipher.database.SQLiteDatabase.a(android.content.Context, java.io.File) ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void net.sqlcipher.database.SQLiteDatabase.a(android.content.Context) ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void com.myapp.BBISDK.ax.o() ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void com.myapp.BBISDK.ax.<init>(java.lang.Integer, com.myapp.BBISDK.d.a, android.app.Activity) ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at com.myapp.BBISDK.ax com.myapp.BBISDK.ax.a(java.lang.Integer, com.myapp.BBISDK.d.a, android.app.Activity) ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void com.myapp.myapp.LoginActivity.onCreate(android.os.Bundle) ((null):-1) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:5990) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1106) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2278) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2387) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.ActivityThread.access$800(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:151) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1303) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.os.Looper.loop() (Looper.java:135) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:5254) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[], boolean) (Method.java:-2) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:372) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:903) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:698) 
03-09 14:47:45.834 24895-24895/? A/art: art/runtime/thread.cc:1143] 
03-09 14:47:45.965 24895-24895/? A/libc: Fatal signal 11 (SIGSEGV), code 2, fault addr 0x203a79ac in tid 24895 (kit.myapp) 
03-09 14:47:45.965 24895-24895/? I/libc: Suppressing debuggerd output because prctl(PR_GET_DUMPABLE)==0 

Я получаю подобное ошибка при запуске приложения в режиме отладки, но это не приводит к сбою.

Любое направление было бы замечательным. Благодарю.

+1

Это может быть проблема ProGuard. Если вы установили 'minifyEnabled true', попробуйте' -keep class net.sqlcipher. ** {*; } 'и посмотрим, поможет ли это. – CommonsWare

+0

Это сделало трюк! Благодаря! – nserror

ответ

0

Когда вы переезжаете с debug на release, вы начинаете получать NoSuchFieldError или подобные «эй, этого не хватает!» ошибки, поверните сначала свои настройки ProGuard. Если -keep класса или пакета устраняет проблему, у вас есть хотя бы стоп-решение. Вы можете добавить элемент TODO, чтобы придумать более тонкое решение.

+0

В такой ситуации, куда вы обращаетесь за ответами? Что касается мелкозернистого раствора. У меня было много проблем, просто чтобы APK собирался с помощью proguard - и мне совершенно неудобно использовать строки -dontwarn, которые я должен был использовать, чтобы получить правильную компиляцию. – nserror

+1

@nserror: «Куда вы обращаетесь за ответами?» - um, переполнение стека? :-) «Мне совершенно неудобно использовать строки -dontwarn, которые я должен был использовать, чтобы получить правильную компиляцию» - да, я склонен согласиться. Нет ничего, что требует от вас использования ProGuard, поэтому вы можете установить «minifyEnabled false» (или оставить его выключенным), если хотите. Google делает свою собственную систему минимизации как часть инструментальной базы Jack-and-Jill, поэтому со временем ситуация может улучшиться. – CommonsWare