ラベル Proguard の投稿を表示しています。 すべての投稿を表示
ラベル Proguard の投稿を表示しています。 すべての投稿を表示

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時間かかった・・・(笑

2013年4月16日火曜日

Proguard returned with error code 1.

昨日の続き
Progaurd有効にするとapkエクスポートできない件でどハマり。

Conversion to Dalvik format failed with error 1については解決したけど
エラー内容が変わった。


Proguard returned with error code 1. See console

なんとかapk作るとこまでたどり着けたのでやったこと書いとく。

環境
  • ADTは21.1
まず発生してた症状
  • Helloworld作成→apk出力OK
  • proguard有効化→apk出力OK
  • Pankiaプロジェクト参照追加→エラー
エラー内容

[2013-02-28 00:31:54 - test2] Proguard returned with error code 1. See console
[2013-02-28 00:31:54 - test2] Warning: com.amazon.inapp.purchasing.FailurePrompt: can't find superclass or interface com.amazon.android.framework.prompt.SimplePrompt
[2013-02-28 00:31:54 - test2] Warning: com.amazon.inapp.purchasing.KiwiBaseCommandTask: can't find superclass or interface com.amazon.android.framework.task.command.AbstractCommandTask
[2013-02-28 00:31:54 - test2] Warning: com.amazon.inapp.purchasing.KiwiPurchaseRequestCommandTask$1: can't find superclass or interface com.amazon.android.framework.task.Task
[2013-02-28 00:31:54 - test2] Warning: com.amazon.inapp.purchasing.FailurePrompt: can't find referenced class com.amazon.android.framework.prompt.SimplePrompt
[2013-02-28 00:31:54 - test2] Warning: com.amazon.inapp.purchasing.FailurePrompt: can't find referenced class com.amazon.android.framework.prompt.PromptContent
以下大量にエラー

ぐぐりまくったら下記方法を発見。
  • proguard-project.txtに下記を追加
-dontwarn com.google.**
-dontwarn com.amazon.**

これでエラーは出なくなった。
けど無視しただけだよね?本当にこれでいいのか・・・

参考サイト:

2013年4月15日月曜日

Conversion to Dalvik format failed with error 1

104にPankiaを使ってネットランキングとトロフィー機能を付けてみたんだけど
apkにエクスポートする段階でエラーが出てしまう・・・。
Conversion to Dalvik format failed with error 1
proguardなのかpankiaなのか・・・
前はリリースできてたからそれ以降の変更点としては

  • pankiaライブラリへの参照を追加
  • ネットランキング、アチーブメント機能追加
  • proguardの有効化

一気にいろいろやっちゃって原因切り分けれん。

ハマりそうだったのでとりあえず元通りにしてから考え直すことに。
pankiaの参照削除、PankiaActivity削除、proguard無効化、etc...
apk作れることを確認。

さて、まずはproguradだけ確認しようか。
proguardのコメントアウトされている行を再度コメントアウトして・・・

実行したけど相変わらずエラー。
[2013-02-26 23:33:20 - game104] Proguard returned with error code 1. See console
[2013-02-26 23:33:20 - game104] Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState
[2013-02-26 23:33:20 - game104] Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState
[2013-02-26 23:33:20 - game104] You should check if you need to specify additional program jars.
[2013-02-26 23:33:20 - game104] Warning: there were 2 unresolved references to classes or interfaces.
[2013-02-26 23:33:20 - game104] You may need to specify additional library jars (using '-libraryjars').
[2013-02-26 23:33:20 - game104] java.io.IOException: Please correct the above warnings first.
[2013-02-26 23:33:20 - game104] at proguard.Initializer.execute(Initializer.java:321)
[2013-02-26 23:33:20 - game104] at proguard.ProGuard.initialize(ProGuard.java:211)
[2013-02-26 23:33:20 - game104] at proguard.ProGuard.execute(ProGuard.java:86)
[2013-02-26 23:33:20 - game104] at proguard.ProGuard.main(ProGuard.java:492)

んーcom.google.ads.internal.state.AdStateが見つからんって言ってるか?
ぐぐったらここ見つけた。
"AdMob SDK 6.1.0 and 6.2.1"から発生するエラーだから
proguard-project.txtに"-dontwarn com.google.ads.**"を追記しろって。

追記したらapk出力できた。1歩前進。

再度Pankia追加してみる。

  • プロジェクトにpankiaライブラリプロジェクトへの参照追加

そのままエクスポート。

それでもエラー。。。
Proguard returned with error code 1. See console

[2013-02-26 23:43:03 - game104] Proguard returned with error code 1. See console
[2013-02-26 23:43:03 - game104] Warning: com.amazon.inapp.purchasing.FailurePrompt: can't find superclass or interface com.amazon.android.framework.prompt.SimplePrompt
[2013-02-26 23:43:03 - game104] Warning: com.amazon.inapp.purchasing.KiwiBaseCommandTask: can't find superclass or interface com.amazon.android.framework.task.command.AbstractCommandTask
[2013-02-26 23:43:03 - game104] Warning: com.amazon.inapp.purchasing.KiwiPurchaseRequestCommandTask$1: can't find superclass or interface com.amazon.android.framework.task.Task

以下700行以上続くエラー。。。なげーよ。
proguardに色々書いてみたが消せず。
progaurdわけわからんと思って無効化してみたら別のエラー出るし…。

また明日・・・。

追記:こちらで一応解決しました。



参考サイト:


2013年4月14日日曜日

proguardの有効化


Pankiaを導入した際、Proguardの設定がうまくできかなかったので再度調べてみた。

Pankiaのドキュメントには
・ADT8.0以降で作成したプロジェクトには"proguard.cfg"ファイルが自動生成されている
・"proguard.cfg"に記述を追加してね~
・追加しないとAPKにしたとき正しく動かないよ~
って書いてあったのだが
どこを探しても"proguard.cfg"がない。

調べてみると詳しく説明してあるサイトを見つけました。
Androidに統合されたProGuardに関する改善点(ADT17)
ここによると
・ADT17.0にてproguardに関する改善がいくつか行われた。
・"proguard.cfg"はなくなり、2つの構成設定ファイルに統合された。
・ただ使うだけなら"project.properties"の中の下記行をコメント解除するだけでいい。
# To enable ProGuard to shrink and obfuscate your code, uncomment this
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
というようなことが書いてありますね。

なるほどシステム用、アプリケーション用に分かれたのは合理的。
ユーザーはシステム用の方は意識する必要がなく、必要ならアプリケーション用の方だけ修正すればいいと。
上記コメントアウト行の最後にある"proguard-project.txt"というのがアプリケーション用っぽいです。
探してみたら新規で作ったプロジェクトのRoot直下に置かれています。

こいつがproguard.cfgの代わりとみて間違いなさそう。

開いてみるとプロジェクトごとのkeepオプションはここに書いてね~って書いてありますね。
pankiaを使うときはここに記述するようにします。

Related Posts Plugin for WordPress, Blogger...