2013年4月19日金曜日

Can't find SQLiteDatabase.mNativeHandle

リリースした署名付きAPKが実際インストールしてみると動かない。
Can't find SQLiteDatabase.mNativeHandle から始まるエラー。

なんとか直ったのでメモ
以下DDMSで確認した実行時のエラー
03-02 22:21:08.089: E/Database(6563): Can't find SQLiteDatabase.mNativeHandle
03-02 22:21:08.089: E/Cursor(6563): Can't find net/sqlcipher/database/SQLiteCompiledSql
03-02 22:21:08.089: E/Cursor(6563): Can't find net/sqlcipher/database/SQLiteQuery
03-02 22:21:08.089: E/Cursor(6563): Can't find net/sqlcipher/database/SQLiteProgram
03-02 22:21:08.089: E/Cursor(6563): Can't find net/sqlcipher/database/SQLiteStatement
03-02 22:21:08.089: E/CursorWindow(6563): Can't find net/sqlcipher/CursorWindow
03-02 22:21:08.105: E/AndroidRuntime(6563): FATAL EXCEPTION: main
03-02 22:21:08.105: E/AndroidRuntime(6563): java.lang.NoClassDefFoundError: net.sqlcipher.CursorWindow
03-02 22:21:08.105: E/AndroidRuntime(6563): at java.lang.Runtime.nativeLoad(Native Method)
03-02 22:21:08.105: E/AndroidRuntime(6563): at java.lang.Runtime.loadLibrary(Runtime.java:432)
03-02 22:21:08.105: E/AndroidRuntime(6563): at java.lang.System.loadLibrary(System.java:554)
03-02 22:21:08.105: E/AndroidRuntime(6563): at net.sqlcipher.database.SQLiteDatabase.a(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at net.sqlcipher.database.SQLiteDatabase.a(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.api.db.LocalDBHelper.(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.api.db.LocalDB.(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.api.db.LocalDB.initialize(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.PankiaController.(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.PankiaController.start(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.pankia.PankiaActivity.onCreate(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.naichilab.game104.TitleActivity.onCreate(Unknown Source)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.os.Looper.loop(Looper.java:123)
03-02 22:21:08.105: E/AndroidRuntime(6563): at android.app.ActivityThread.main(ActivityThread.java:3687)
03-02 22:21:08.105: E/AndroidRuntime(6563): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 22:21:08.105: E/AndroidRuntime(6563): at java.lang.reflect.Method.invoke(Method.java:507)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
03-02 22:21:08.105: E/AndroidRuntime(6563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-02 22:21:08.105: E/AndroidRuntime(6563): at dalvik.system.NativeStart.main(Native Method)
03-02 22:21:08.105: E/AndroidRuntime(6563): Caused by: java.lang.NoClassDefFoundError: net.sqlcipher.database.SQLiteStatement
03-02 22:21:08.105: E/AndroidRuntime(6563): ... 25 more
03-02 22:21:08.105: E/AndroidRuntime(6563): Caused by: java.lang.NoClassDefFoundError: net.sqlcipher.database.SQLiteProgram
03-02 22:21:08.105: E/AndroidRuntime(6563): ... 25 more
03-02 22:21:08.105: E/AndroidRuntime(6563): Caused by: java.lang.NoClassDefFoundError: net.sqlcipher.database.SQLiteQuery
03-02 22:21:08.105: E/AndroidRuntime(6563): ... 25 more
03-02 22:21:08.105: E/AndroidRuntime(6563): Caused by: java.lang.NoClassDefFoundError: net.sqlcipher.database.SQLiteCompiledSql
03-02 22:21:08.105: E/AndroidRuntime(6563): ... 25 more
03-02 22:21:08.105: E/AndroidRuntime(6563): Caused by: java.lang.NoSuchFieldError: mNativeHandle
03-02 22:21:08.105: E/AndroidRuntime(6563): ... 25 more
03-02 22:21:08.117: E/(128): Dumpstate > /data/log/dumpstate_app_error


最初 java.lang.NoClassDefFoundError: net.sqlcipher.CursorWindow に着目して調べてたんだけど
どーも欲しい情報と違う。

次に Can't find net/sqlcipher/database/SQLiteCompiledSql
こっちで調べてみた。
そしたらこちらに有用な情報みっけ。
http://zak-raw.hatenablog.com/entry/20120221/1330657597
どんぴしゃなエラー内容が書いてある。
どーも必要なファイルがproguardによって削除されてるらしい。

proguard-project.txtに以下を記述
-keep class net.sqlcipher.database.** {*;}

うごいた!!
ここまで2時間かかった・・・(笑

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...