2013年4月20日土曜日

sqlcipher NoSuchFieldError

直したと思ったバグが残ってた。
先日書いた記事でproguardにより署名付きAPKが動かなくなったけど
それの続きっぽい。

先日の対応で自分の持ってるGalaxyS(Android2.3.3)は解決したんだけど
Android4.0.3持ってる人から立ち上がらないとの報告があった。
実際AVDを立ち上げてAPKを直接Installして動かしてみたらエラーした。
Android 4.0.3でのエラー画面
対応内容メモ

エラー内容は以下の通り
java.lang.NoSuchFieldError: no field with name='nWindow' signature='I' in class Lnet/sqlcipher/CursorWindow;
at java.lang.Runtime.nativeLoad(Native Method)
at java.lang.Runtime.loadLibrary(Runtime.java:368)
at java.lang.System.loadLibrary(System.java:535)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(Unknown Source)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(Unknown Source)
at com.pankia.api.db.LocalDBHelper.(Unknown Source)
at com.pankia.api.db.LocalDB.(Unknown Source)
at com.pankia.api.db.LocalDB.initialize(Unknown Source)
at com.pankia.PankiaController.(Unknown Source)
at com.pankia.PankiaController.start(Unknown Source)
at com.pankia.PankiaActivity.onCreate(Unknown Source)
at com.naichilab.game104.TitleActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:4473)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)

net/sqlcipher/CursorWindowの中のnWindowがないって言ってるのか?

昨日proguard-projectに記述したのは
-keep class net.sqlcipher.database.** {*;}

だったのでもしやと思い
-keep class net.sqlcipher.** {*;}

に変更したらエラーしなくなった。

無事起動。
なーんで2.3.3ではエラーしないんだろうなー。

4.0で起動しない状態で2日間ほっといたもんだから何人かアンインストールしちゃった。残念。
今度からはちゃんと署名付きAPKをいくつかのAVDに入れてテストしよう。めんどうだけど・・・。

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...