Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
ラベル Pankia の投稿を表示しています。 すべての投稿を表示
ラベル Pankia の投稿を表示しています。 すべての投稿を表示

2013年4月23日火曜日

Pankia match feature がAVDで動かない

以前からネット対戦できるもの作ってみたいなーと思っていて
Pankiaでその機能が簡単に実装できるらしいから試してみた。

結果、対戦部屋はできたけど対戦相手が入ってくるところまでは確認できなかった。

やったことメモ

Wikiを見ながらアプリに組み込み、実機へ転送。
ダッシュボードから対戦部屋を作成できることを確認できた。
対戦メニュー
対戦部屋の作成
部屋の作成完了
ここまでは問題なし。

よーし対戦相手入ってきたときの動き確認しよう!
と思っても実機1台しか持ってない。
ということで仕方なくAVDに同じアプリを入れて実行。

起動すらしない・・・。

03-04 16:49:31.423: E/AndroidRuntime(1098): FATAL EXCEPTION: Timer-0
03-04 16:49:31.423: E/AndroidRuntime(1098): java.lang.NullPointerException
03-04 16:49:31.423: E/AndroidRuntime(1098): at com.pankia.api.networklmpl.bluetooth.BluetoothController.getDeviceAddress(BluetoothController.java:11)
03-04 16:49:31.423: E/AndroidRuntime(1098): at com.pankia.api.networklmpl.bluetooth.BluetoothPacket.getHeartbeatPacket(BluetoothPacket.java:42)
03-04 16:49:31.423: E/AndroidRuntime(1098): at com.pankia.api.networklmpl.nearby.NearbyHeartbeatManager.run(NearbyHeartbeatManager.java:54)
03-04 16:49:31.423: E/AndroidRuntime(1098): at java.util.Timer$TimerImpl.run(Timer.java:284)

どーみてもbluetoothが使えないからだよなー。


ちなみにPankiaの対戦機能はオンライン対戦とローカル対戦の2種類がある。
・オンライン対戦は3Gなり無線LANなりで世界中の人と対戦
・ローカル対戦はBluetoothを使って近くにいる人と対戦
って感じらしい。
現時点では対戦相手が揃ってからの動作を確認したいだけなので
オンライン対戦だけでも動いてくれたらいいのにな・・・

ネット探したけど情報ヒットせず。
どうしようもないのでPankia Supportに書き込んできた。
情報くれるといいなぁ…。

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月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を使うときはここに記述するようにします。

2013年4月11日木曜日

ソーシャルプラットフォームPankiaの導入

ソーシャルプラットフォームPankia

株式会社パンカクが提供するソーシャルプラットフォームPankiaを入れてみたので簡単にまとめておきます。

ソーシャルプラットフォーム?

ソーシャルプラットフォームを一言で言うと「スマホゲームにネットランキング機能をつけるためのもの」でしょうか。他にもいろんな機能があることは知っていますが自分も初心者なので最初に使いたい機能を代表として取り上げました。語弊のある言い方ですいません。
有名どころだとScoreloopやグリーに買収されたOpenFeintなどがありますね。今回紹介するPankiaもそうです。最初に目についたのでとりあえず使ってみようと思います。

まずはネットランキングを搭載することを目標にしていきます。

ではさっそく

Pankiaの導入

Pankia Developersへの登録

PankiaのHPから新規登録画面へ
・全部記入して登録
登録画面
・メールが送られてくるのでリンクをクリックすると認証完了


PankiaSDKのダウンロード

・再度Pankiaへ行き、ログイン
管理者用画面
この画面が開発者の管理画面ですね。
・画面右Downloadsから「Pankia SDK for Android」をダウンロード
最新はver4.0.3でした。
SDKのダウンロード
・ファイルは解凍して好きな場所に保管します。
あとでEclipseのワークスペースにコピーされるので他の場所がいいでしょう。

ここから少しややこしくなってきます。
本家サイトにとても詳しく書いてありますのでしっかり読みましょう。
このブログはメモなので自分がやったことだけをまとめておきます。


Pankiaへゲームの登録

Pankia管理画面にて「Add a new game」を押す。
・ゲーム追加画面が表示され、以下のように入力しました。
ゲームの登録画面1
ゲームの登録画面2
・追加したゲームの管理画面が表示されるので「Game Key」と「Game Secret」をメモ。
Game KeyとGame Secretを取得

EclipseへPankiaライブラリを追加

・Eclipseメニューの[ファイル] → [インポート] → [一般] → [既存プロジェクトをワークスペースへ]を選択
ライブラリ追加手順1
ライブラリ追加手順2
ライブラリ追加手順3
書き忘れましたが手順3の画像のところで「プロジェクトをワークスペースにコピー」のチェックを入れておきましょう。

テスト用アプリケーションの作成

EclipseにてHelloWorldプロジェクトを作ります。これはいろんなところで紹介されてるので割愛。
プロジェクト名は「testPankia」としました。
テスト用アプリケーションの作成

動きました。
・Pankiaを動かしてみたいだけなので、起動したらPankiaの画面が呼び出されるだけのアプリにしてみましょう。
ボタン作ってクリックしたら~とか難しいのでやらないです。


アプリケーションからPankiaへの参照を追加

・Eclipseにて対象アプリケーション右クリック → [プロパティ] → [Android] → [Library] → [Add]を選択
・Pankiaライブラリを選択して[OK]を押す
・プロパティを[OK]を押して閉じる
参照追加1
参照追加2
参照追加3

アプリケーションの修正

・AndroidManifest.xmlのActivityに下記を追加する
<activity
    android:name="com.pankia.ui.DashboardActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="landscape"
    android:theme="@style/Theme.PN.Dashboard" />
<activity
    android:name="com.pankia.ui.UpdateDashboardActivity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@style/Theme.PN.Main" />
<activity
    android:name="com.pankia.api.manager.IntentManager$IntentManagerActivity"
    android:screenOrientation="landscape"
    android:theme="@style/Theme.PN.Main" />
<activity android:name="com.pankia.api.util.UserKeyUtil$FindUserKeyActivity" />
<activity android:name="com.pankia.api.util.UserKeyUtil$ReturnUserKeyActivity" >
    <intent-filter>
        <action android:name="com.pankia.intent.action.GET_USER_KEY" />
    </intent-filter>
</activity>
<activity
    android:name="com.pankia.SplashActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
    </intent-filter>
</activity>

<receiver android:name="com.pankia.api.manager.SplashBroadcastReceiver" />

追加する場所はもともとあるActivityの後ろ。
Activityの追加

・AndroidManifest.xmlのPermissionに下記を追加する
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.vending.BILLING" />

追加場所はApplicationタグの前
Permissionの追加

・PListの追加
オフラインでPankiaの機能を使うために必要らしいです。
Pankia管理画面からゲーム管理画面に行き、「Export data to plist」でファイルをダウンロード。
Eclipseのゲームプロジェクト以下assetsフォルダにコピー
PListの追加1
PListの追加2

・SQLCipherライブラリの追加
データ改ざん対策として必要らしい
最初に解凍したPankiaプロジェクトファイルの[icudt46l.zip]ファイルをPListと同じ場所にコピーする
SQLCipherの追加

・ProGuardによる難読化の設定
proguard.cfgが見つからない・・・
APKにしない限り影響なさそうだしとりあえずパス。あとで調べよう。
見つけました。ここにも書きましたがADT17から仕様が変わったようです。
project.propertiesファイルにある下記行の#を消す(proguard有効化)
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

proguard-project.txtに下記を追記
-keep public class com.pankia.** {
 <fields>;
 <methods>;
}

proguardの有効化(project.properties)
proguardの設定(proguard-project)

・MainActivityの変更
MainActivityが立ちあがったときにPankiaのダッシュボードを開くように修正する。
MainActivityを下記のように修正する。Key,SecretはPankiaの管理画面からコピー。
package com.example.testpankia;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import com.pankia.Config;
import com.pankia.Pankia;
import com.pankia.PankiaActivity;
import com.pankia.PankiaError;
import com.pankia.User;

public class MainActivity extends PankiaActivity
{

 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  Pankia.launchDashboard(this);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu)
 {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

 @Override
 protected Config getGameConfig()
 {
  Config config = new Config(this, "YOUR_GAME_KEY_HERE", // gameKey,
   "YOUR_GAME_SECRET_HERE", // gameSecret,
   "YOUR_GAME_TITLE_HERE", // gameTitle,
   null); // Dashboard Custom Background Image
  config.setIMEILoginDisabled(true);
  return config;
 }

 @Override
 protected void onUserDidLogin(User user)
 {
  // TODO Auto-generated method stub
  super.onUserDidLogin(user);
 }

 @Override
 protected void onUserDidFailToLogin(PankiaError error)
 {
  // TODO Auto-generated method stub
  super.onUserDidFailToLogin(error);

  Log.i("Activity", "Logging in failed. Reason:" + error.message);
 }
}

実行

動きました。
ダッシュボードも正しく表示されました。
規約に同意して送信を押すといとも簡単に登録完了。
ダッシュボードが表示されました。

まとめ

とりあえずここまで。
今回は初めて&全て調べながら&記事書きながらやったので3時間ぐらいかかりました。
PankiaDeveloperとEclipseへのプロジェクト追加は一度きりなので
アプリへ追加するだけであれば慣れれば10分ぐらいでしょうか。
こんな簡単にできるの?っていうのが正直な感想でした。
次はハイスコアを登録できるようにしてみます。
Related Posts Plugin for WordPress, Blogger...