先日書いた記事で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.** {*;}
に変更したらエラーしなくなった。
無事起動。 |
4.0で起動しない状態で2日間ほっといたもんだから何人かアンインストールしちゃった。残念。
今度からはちゃんと署名付きAPKをいくつかのAVDに入れてテストしよう。めんどうだけど・・・。