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

2013年4月21日日曜日

AVDに署名付きapkをインストールする

104をリリースする際、自分の持っている端末(GalaxyS)で動作確認したのだが、
リリース後Android4.0の端末にて不具合が出るとの報告を受けた。

今回それを確認するため、AVDに署名付きAPKをインストールしたので方法をメモしておく。

AVDの作成

とりあえず作ったのは下記2点

・XperiaAcroHD(Android4.0.3)
Xperia Acro HD のAVD
・Nexus7(Android4.1.2)
Nexus7 のAVD

署名付きAPKの作成

eclipseのメニューからエクスポート
keystoreを選択してぽちぽちと。

ADBを使ってAPKのインストール

準備
・AVDを起動しておく(1個だけ!)
・APKファイルパスを覚えておく

AndroidSDKをインストールした場所にadb.exeっていうのがある。
自分の場合は "C:\android-sdk-windows\platform-tools\adb.exe"
これをコマンドプロンプトから起動する。

コマンド:adb install [apkのパス]
adb install コマンド
Successと表示されれば成功。
AVDにアプリがインストールされてる。

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に入れてテストしよう。めんどうだけど・・・。

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月18日木曜日

アプリにバージョンを設定する

104をバージョンアップしてリリースするために
バージョン設定の方法を調べた。

Google developersによると
・マニフェストファイルに2つの項目があるよ。
・それは"android:versionCode""android:versionName"だよ。

と書いてあります。

でその2つの説明は、
android:versionCode
・アプリケーションバージョンを表す整数値です。
・アップグレードもしくはダウングレードの評価に利用されます。
・整数型で指定し、バージョンアップ内容の大小にかかわらず変更します。
・好きな整数を指定できますが、1ずつインクリメントしてください。
・この値はユーザーには見えません。

android:versionName
・ユーザーに表示されるバージョンの文字列です。
・これは"<major>.<minor>.<point>"のような文字列で表されます。

versionCodeとversionName

versionCodeは毎回インクリメント、versionNameは好きに設定。
でよさそうですねー。

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わけわからんと思って無効化してみたら別のエラー出るし…。

また明日・・・。

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



参考サイト:


Related Posts Plugin for WordPress, Blogger...