【GeneXus × Android】トースト出すまで・・・

今週末は青森市です!okita です。

GeneXus × Android でトーストを出したいと思います。
公式wiki にも書かれているので、わざわざ説明することも無いのですが
とりあえず手こずった部分もあるので忘れないように投下。


公式wiki:Android 用の外部オブジェクト

難しいコトはしたくないので
上記のリンクから必要なオブジェクトをダウンロードしましょう。

公式wiki の一番下の方にある
Android スマートデバイスの外部オブジェクトのサンプル
リンクをクリック。

新しいページが表示されるので
そのページの小さいダウンロードアイコンをクリックすると
Zipがダウンロードできます。
というか小さすぎだろw

3個ファイルが入ってるはずです。
以下手順
1.GeneXus 終了
起動してる場合は GeneXus を終了させましょう。

2.java ファイルの追加
・MyApi.java
[GeneXus のインストールディレクトリ] \Android\FlexibleClient\src\com\artech\android\api

・UserExternalApiFactory.java
[GeneXus のインストールディレクトリ] \Android\FlexibleClient\src\com\artech\externalapi

にファイルを配置して下さい。
※注意!
UserExternalApiFactory.java は独自に機能追加するときに
追記していくファイルなので
既にファイルが存在したり、別のAPIの記述がある場合は
new ExternalApiDefinition(“myapi”, “com.artech.android.api.MyApi”) , //$NON-NLS-1$ //$NON-NLS-2$
を追記して下さい。
私の環境ではすでに記述されていました。

3.GeneXus の起動
普通に起動しましょう

4.新しくナレッジを作成
既存のナレッジでもいいですが
追加したjavaファイルが正しくコピーされる保証がありません。

5.パネルの作成
Panel for Smart Devices オブジェクトを新規作成

6.アクションの配置
ツールボックスからアクションを配置します。

この時アクション名を聞かれるので適当に入力。
今回は「TestToast」って感じでおk

7.とりあえず保存
とりあえず保存して下さい。

8.エクスターナルオブジェクトの追加
ダウンロードしたファイルの xpz をインポートします。

9.アクションを設定
作成した Panel for Smart Devices オブジェクトに移動して
配置したボタンをダブルクリック!!
ダブルクリックすると「Events」に移動します。
以下を記述
MyApi.LongToast(“ロングトーストだよ!”)

10.実行
とりあえず実行しましょう
すると・・・・
へぇ~・・・・(# ゚Д゚)

11.メインプログラムをTrueに
作成した Panel for Smart Devices オブジェクト の
メインプログラムをTrueに変更
そして再度実行!!!!
はい、トーストが・・・・出ない(゚д゚)!

ココでハマりましたwww
さんざんハマりましたが公式wiki に注意書きがあったのに読んでませんでした。
ってか何書いてるかわかりずらいw

この状態だと
Knowledge Base Navigator 上で作成した
SDPanel が動作しているのでMyAPIが追加されてないようです。

なので Knowledge Base Navigator 上で動かないようにします。

12.右クリック ⇒ 実行
SDPanel を右クリックして「実行」をクリック

こうすると SDPanel だけで実行されます。
公式wiki:Android の実行

ただしビルドが長いw イイ方法無いかな?

13.トーストが表示される

トーストが表示されました
ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

■問題点
12.右クリック ⇒ 実行
この部分でAndroid SDK的なエラーが出ました。
「zipalign.exe」が無いとか言い出してエラーになる・・・
「zipalign.exe」ってなんだよw

調べた結果・・・同じ現象を解決した人がいましたw
原因としてはSDK内のパスの構成が変わったようです。
UnityでAndroidビルドエラー
http://qiita.com/relzx/items/653f1f43c0e731443813

上記リンクはUnityで起こってるようですが
Unity も GeneXus も似たようなもんなんで同じ対応でオッケーw

■結果
トーストって結構大事だと思います。個人的に。
同じ感じでLogcatに出るログ用のAPIも作れるなぁ・・・
なんてことも思いましたが、まったく作ってないです(´・ω・`)

以上です。