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

2012/02/09

「ぐぐっと!急上昇ワード Android」の誕生について。ちょっと昔話


10万ダウンロードというひとつの区切りを迎えた今、ちょっとこのアプリについて振り返ってみたいと思います。
(Androlibの情報によると、Android Marketにてダウンロード数が50,000を超えるアプリの割合は3.8%とのこと)

まずこのアプリをひとことで説明すると「トレンドキーワード検索・共有アプリ」です。
しかし最初からこのアイデアがあり、実現しようとアプリをつくったわけではありません。
(AndroidをターゲットにしたのはJavaの方がなじみがあったからですが)

まず最初に考えたのは「できるだけ端末から削除されないようなアプリをつくろう」というものでした。
一発ネタ的なアプリはおもしろいけどすぐ飽きてしまうし、誰もが使うような定番アプリは競争が激しい。
そこで何度も使えて、消さずに残しておいてもいいやと思ってもらえるようなアプリのネタを考えることにしました。

「Amazonのロングテールならぬロングターム戦略や!」と言ったとか言わないとかw

そしてネットをいろいろ巡っているときに「Google急上昇ワード」がネタとして良いかもしれないと思い、さらに調査を続け、キーワード・ランキングをツイートするTwitterBotがそこそこフォロワーがついていることを確認しました。
また同じようなアプリについて調べたところ、Androidには同種のアプリを見つけることができませんでした。(iPhoneにはランキングを紹介するアプリが1本だけありました。今ではiPhone/Androidとも、同種のアプリが多数あります)
「この方向はアリかも」と採用しました。

次にネタのベースが決まったところで、アプリとしてはどうしたらよいだろうかと考えていきました。
キーワードのランキングが見られるだけではアプリとして面白みに欠けるので、プラスアルファが欲しい訳です。

更新されるキーワードを眺めていると、時々知らないキーワードが出てきます。そうすると自然に検索して調べたくなります。
こうしてキーワードのランキングから任意のワードの検索ができるアプリのアイデアが生まれました。

結果このアイデアは大正解。検索という能動的な機能に結びつけたことが、当初のコンセプト(端末から削除されないようなアプリ)を実現できた一番の要因であると同時に、単なる情報収集ツールではなく、暇つぶしツールとしても「使える」アプリになり、10万ダウンロードを実現できた要因だと思います。

実際このアイデアが正しかったのは、その後同種のアプリがiPhone/Android向けに多数リリースされていることが証明していると思います。

爆発的にリリースされるアプリが増えている現在は、上記のようなアプリの作り方では、結果を出すのは難しいのではないかと思います。また既に多種多様なアプリがリリースされているので、差別化ばかりを考えると、ニーズのない誰得なアイデアばかりになってしまいがちです。
そんな状況においては、定番ジャンル・競争の激しいジャンルでも、後発だろうと先行者よりも良いアプリをつくってやろうという気概と実行力が必要ではないかと感じています。

ただし本質としては「ユーザに価値あるサービスを提供すること。そしてそれがたまたまアプリという形であった」になっていないとダメなのでしょう。

これまでアプリをつくってきて、思ったこと感じたことををつらつらと書いただけのエントリになってしましましたが、改めて、これからも楽しみつつアプリをつくっていきたいと思いました。

「ぐぐっと!急上昇ワード Android」10万ダウンロード突破

Androidアプリを公開しましたのエントリで初登場した「ぐぐっと!急上昇ワード」が10万ダウンロード突破しました。(昔のエントリには今みるとなつかしい画面がw)

お使いいただいているユーザの皆様をはじめ、少しでも興味を持ってダウンロードしてくれた方、レビューに取り上げていただいたサイトおよびメディアの方々に改めて感謝申し上げます。

公開してから1ヶ月で5000ダウンロードを超えたので、当時として順調な滑り出しと思います。
なにせAndroid OS 1.6の時代、ほとんどはdocomo SO-01B(Xperia X10)のユーザです。
(当時はアプリを日本にしか配信していませんでした)

そしてリリースから1年後、機能追加も一段落しダウンロード数は7万を超えています。
また、この時のアップデートでアイコンのデザインを変更しました。

そしてさらに10ヶ月、10万ダウンロード突破となりました。

始めてリリースしたアプリがここまで上手くいかなかったら、自身のスマートフォンに対する取り組み方も違っていたと思います。

機能についてのアイデアもまだまだあります。
引き続きのご愛顧を賜りますようお願い申し上げます。

Android Market「ぐぐっと!急上昇ワード」

2012/02/02

Corona SDKで日本語のアプリ名をつける方法

昨日の勉強会でも質問に挙がっていましたが、最初問題になるところですよね。
ということで現状私がやっている方法をまとめてみました。


まずはiOSの場合。

build.settingsplist"CFBundleLocalizations"の設定を追加します。
下記の場合は"ja"と"en"を設定しました。
※plist周りについてはネイティブでの開発の情報をググるといいと思います

--build.settings(抜粋)
settings =
{
  ...
  iphone =
  {
    plist =
    {
      CFBundleLocalizations = {
        "ja",
        "en",
      },
      ...
  },
  ...
}
さらに追加した言語にあわせ下記のようにファイル
ja.lproj > InfoPlist.strings
en.lproj > InfoPlist.strings
を作成します。


それぞれファイル内には"CFBundleDisplayName"を設定します。

・ja.lproj/InfoPlist.strings
CFBundleDisplayName = "なでうさぎ";


・en.lproj/InfoPlist.strings
CFBundleDisplayName = "NadeUsagi";


これでビルドするとiPhoneの言語環境が日本語の場合は「なでうさぎ」と表示され、英語の場合は「NadeUsagi」と表示されるアプリになります。


※日本語および英語以外の場合も「NadeUsagi」と表示されるようです。
 他2〜3言語で試した限りはそうでした
※言語コードを増やせば他言語のアプリ名も付けられるようになります
※Buildダイアログの「Application name:」は「nadeusagi」のまま変更は加えていません
※ひとつのバイナリで言語に合わせたアプリ名に出し分けることが可能ということになります


さて次はAndroidの場合です

Buildダイアログの「Application name:」を変更します。
日本語のアプリ名にしたい場合は「nadeusagi」を「なでうさぎ」と変更してビルドします。


簡単ですね。といきたいところですが、このアプリは日本語以外の環境でも「なでうさぎ」と表示されます。

※残念ながらひとつのバイナリで言語に合わせたアプリ名に出し分けることはできないようです
こうやればできるといった情報をお持ちの方がいらっしゃったら、ぜひご教授ください。

日本でしかリリースしないアプリであればこれでOKだと思いますが、ビジネス的にはそんなことは考えにくいので、アプリのリリース先(国)との兼ね合いで別アプリにするとか、英語名に統一するとかの判断が必要なのかも知れませんね。

そういえば以前Coronaの会のMLに投稿された日本語+半角英字のアプリ名も実機転送までは問題なくできました。すでに修正されてるみたいです。


ちなみに、アプリ内のテキストを言語毎に切り替えて多言語対応のアプリにしたい場合は、下記のブログで紹介されている方法がわかりやすかったです。

Corona SDK: Localization made easy - BLOG - Monkeybin
http://monkeybin.no/blog/archives/2011/09/18/corona-sdk-localization-made-easy/

2012/01/04

アイコン/スプラッシュ画像の確認にCorona SDKを使う

スマートフォン関連のデザインをやっていると、PCの画面で見ている時と、実際にデバイス上に落とし込んで見ている時の印象の違いに「ほぅ!」って思うことも多々あります。(※イメージと違うわーってことです)

特にアイコンやスプラッシュ画像をデザインする際は、ロゴが潰れてないか、文字が読めるのか、またiPhone/iPad/Androidで画面サイズや画角が異なっているので、それぞれにバランスを調整しつつレイアウトしたりと(単純にリサイズしているだけじゃないんですよー。下記の画像を見比べてみてくださいねw)、気を遣う部分も多いので、必ず実機にインストールした状態での確認が不可欠です。

自作のアプリであれば開発の最終段階あたりで作業するので、実機にインストールしての確認も何ら問題なくできるのですが、アイコン/スプラッシュ画像のデザインのみ依頼を受けた場合等、組み込むアプリが手元にない場合はダミーのアプリを作って確認することになります。

前置きが長くなりましたが、ここからが本題です。
確認用のダミーアプリには「Corona SDK」が向いているということに気付きました。

私の場合はiPhone/iPad/Androidのダミーアプリをそれぞれ用意し、スプラッシュ画像をスプラッシュとしてではなく、アプリの背景画像として使用することで、じっくり確認できるようにしています。そして、このダミーアプリの画像(複数解像度のアイコンおよびスプラッシュ)を上書き>ビルド>実機転送>確認のサイクルを繰り返してブラッシュアップを行っています。

もう少しメリットを具体的にいうと
コードが短い(さらにファイル一式用意してしまえば、後は画像の差し替えのみ)
アプリ名をビルド時に変えられる(フォルダ名を変えてしまうのでもOK)
IDEに縛られない(自由だし小回り効くし)

といったところでしょうか。
なお実機転送は無料トライアル版でも可能です。



こちらは昨年末、株式会社あゆた様のご依頼で作成したものです。上記以外にもストア/マーケット用の画像も作成させていただきました。ARを使ったおもしろいアプリですので、一度お試しあれ。詳細はリンク先ページにて。

[iPhone,iPad,Android] "Christmas on a table AR" / "机の上のクリスマスAR"

2011/09/17

Director ClassとAndroidのKEYイベント[Corona SDK]

Corona SDKでAndroidのKEYイベントを取得し、Backキーでひとつ前の画面に戻ったり、Menuボタンで設定画面に遷移したりといった処理を行おうとした際に、Director Classを使っている場合には、ちょっとした注意が必要です。(もちろん私もハマりましたよw)

先日リリースした「Cutie Horoscope」でもAndroidではキー操作によって“戻る”と“メニュー画面を表示”を行っています。
※実際の動きは、アプリをDLして確認ください。

最初はアンスカのAPI解説ページを見て、取得したKEYイベントにあわせてdirector:changeScene()で画面遷移できるんだろうと思って、そのようなコードを書いてみたのですが、画面遷移のアニメーションが効かないという状況に。。。

あれ?

この時すでにライセンスを購入済みだったのでForumを検索してみると、あっ、あった!
「Android device back button utilizing Director class」というタイトルのトピックが立てられていました。

あー、色々と小細工的な処理が必要なようです。
※Forum見られる方はそちらへ。サンプルのソースが載ってます

下記に「Cutie Horoscope」のソースを抜粋して解説します。





new = function ( params )
  
  --(略)--
  
  local localGroup = display.newGroup()
  
  --ポイント1--
  local backButtonPushed = false
  local menuButtonPushed = false
  
  --(略)--
  
  --ポイント2--
  local animate = function( event )
    if backButtonPushed == true then
      backButtonPushed = false
      os.exit()
    elseif menuButtonPushed == true then
      menuButtonPushed = false
      director:changeScene( "setting", "overFromBottom" )
    end
  end

  local onKeyEvent = function( event )
    local phase = event.phase
    local keyName = event.keyName
    
    if phase == "up" and (keyName == "back") then
      backButtonPushed = true
    elseif phase == "up" and (keyName == "menu") then
      menuButtonPushed = true
    end
    
    return true
  end
  
  --(略)--
  
  --ポイント3--
  function clean ( event )
    Runtime:removeEventListener( "key", onKeyEvent )
    Runtime:removeEventListener( "enterFrame", animate )
    backButtonPushed = nil
    menuButtonPushed = nil
  end
  
  local initVars = function ()
    
    --(略)--
    
    --ポイント2--
    Runtime:addEventListener( "key", onKeyEvent )
    Runtime:addEventListener( "enterFrame", animate )
    
    --(略)--
    
  end
  
  initVars()
  
  return localGroup
  
end

ポイントは3つ
1.ボタンが押されたことを判別するフラグを用意する
2.enterFrameイベントでそのフラグを判定して遷移等の処理を行う。KEYイベントはどのキーが押されたか、フラグを書き換えるだけ
3.cleanメソッドでイベントリスナーとフラグの解除を行う

上記の様にしないと、遷移時のエフェクトが掛かりません。そして、イベントの解除等をしないと、最初に設定したイベントが有効のままになってしまうようで、Backキーを押した時に戻る画面が違って何故?ってことになります。

動かし方がわかれば、後はキーと遷移時のエフェクトの組み合わせをうまくやれば、ネイティブ・アプリ(Javaで開発したアプリ)のような動作が可能になります。

2011/09/16

Corona SDKでアプリをリリースする際に起こった「えっ!?」ってこと

Corona SDKでのアプリ開発では、色々と問題も起きます。今回はちょっとキビシイ現実を書きます。

下記は「Cutie Horoscope」のbuild.settingsファイルの中身です。

settings =
{
  iphone =
  {
    plist =
    {
      MinimumOSVersion="4.0",
    },
  },
  android =
  {
    versionCode="2",
    versionName="1.1",
    installLocation="preferExternal",
  },
}

まず、iOS向けに「MinimumOSVersion="4.0"」が設定してあります。
これはiTunes Connectにファイルを送信し終えた時に、たまたまBinary Detailsをクリックすると、なんということでしょう「Minimum OS Requirements」が「3.1」に、そして「Supported Architecture」が「armv6, armv7」になっているではありませんか!
「Coronaは4以上で固定ではなかったのかよ〜」と、あわててファイルを削除し、「MinimumOSVersion="4.0"」を加えることによって回避することにしました。実際に最初にUPした設定のファイルをオーガナイザ経由で第1世代のiPod touch(iOS 3.1.3、armv6)の端末にインストールすることが可能でした。(起動はしますが、表示が崩れるとか使えない状態だったので、気付かなかったら、非常に危ないところでした)
Daily Build版を使用しているので、たまたまデグレが起こったのかも知れませんが、今後「MinimumOSVersion」は必ず設定しようと決めました。

次にAndroid向けに「installLocation="preferExternal"」が設定してあります。
これもおかしな現象なのですが、デバッグ・ビルドにおいては、端末にインストールしたアプリはSDカードに移動可能でしたので、デフォルトでそうゆう設定になっているのだろうと思っていたのですが、いざリリースしてみると、SDカードに移動できません。なんでやねん!ってことで、すぐさま修正版をリリースすることに。
※アプリの動作には関係ないですが、アプリのファイル容量が大きいので必ずやっておきたい設定です

まあこんな感じで、Coronaでの初リリースで色々とトラブル?に見舞われました。もしこのトラブルがだれか他の方に起こり「Corona使えねぇよ!クソがっ!」って評価をされていても、しょうがないと思います。実際半分ぐらい私もそう思っています。
※これは評価されるタイミングに用意できてない方が悪いので

あと「versionName="1.1"」ってなってますが、マーケットでの表示は「1.0」のママです。中の人はあまり細かいことには関心がないのかも知れません。

今回は否定的な事も含め、こうゆう現実があることも知っていて欲しいと思い、起こったことを書きました。
しかしながら、Corona SDKが私にとって作りたいと思ったアプリを一番作りやすかった開発環境であることには変わりませんので、この状態が続く限り、Coronaを使っていると思います。

この記事が、同じように躓いたりハマったりすることがあった方に、少しでも役に立てたら嬉しいです。

※私はアンスカのまわし者ではないですし、正直Coronaを広めたいとか考えていません
※人に「ぜひ使うべき」とか「勧めやすい」とは思っていないという意味です

タブレット向けにアプリ作りたいなぁ。

2011/08/31

Corona SDKでiPhone/Androidアプリをリリース

【予告】Corona SDKでiPhone/Androidアプリをリリース(予定)で予告したアプリをリリースしました。

アプリ紹介サイト
iTunesストア
Androidマーケット




スクリーンショットを見ていただければ分かるように、女性をターゲットにしたアプリです。
※動画はiPhoneで見せていますが、Androidでも全く同じUI(デザイン)です

このアプリをひと言で表すと「ピンク色の端末に似合うアプリ」です。

Corona SDKでアプリ開発をしようと思った経緯は前回書いた通りなのですが、実際にアプリのアイデアを検討している際に、以下の点から、本アプリを開発することを決定しました。

・無料の星占いAPIを見つけた点
(試してもらうために無料アプリとしてリリースしたかったので)

・カスタマイズ度の高いアプリとして女性向けにデザインされたアプリというのが合致している点
(女性向けというのはある意味分かりやすいかな?いや難しいか?)

・同類アプリが数多くリリースされている中で、デザインの差別化がどれだけ通用するか見たかった点
(本当にデザインは重要なのか? また、通用するデザインをつくることができるのか?)

・自分自身あまりやらないテイストのデザインに挑戦したかった点
(個人的なテイストとはかけはなれているので、デザインには通常よりも時間がかかりました。しかしながら、デザイナとして要件を満たすデザインは出来なくては!また出来るからこそデザイナです)

Corona SDKで開発したアプリ、しかもゲームではなくツール系で、なおかつ上記のような意味合いも含んだテストケースアプリとして、どこまでの結果が残せるか期待も込めて、しばらくは見守っていきたいと思っています。
※もちろんメンテナンス的アップデートや、プロモーション的なことはやっていきますよ!

ぜひダウンロードしてみてください m(_ _)m

Cutie Horoscope - keygx
Cutie Horoscope - keygx

Cross-platform Mobile App Development Showcase


2011/05/16

Androidアプリ公開から1年がたちました

Androidアプリ「ぐぐっと!急上昇ワード」をリリースしてから1年が経過しました。

1年間で7万を越えるダウンロードをいただき、とても嬉しく思っています。
ユーザーの皆様、ありがとうございます。

現在も日々ダウンロードされていますので、今年中に10万ダウンロードを越えるように、頑張っていきたいと思っています。(できるだけ要望に応えられるように改善していきたいと思っています)
広告のインプレッションも月間30万を越えました。こちらの数字からも、多くのユーザーの方々に使っていただいている実感を味わっております。

引き続き、よろしくお願い申し上げます。

2010/12/31

2010年の振り返り

奇跡的にこのブログが1年以上継続できたので、2010年の振り返りをしてみることにします。

まず個人活動としては、

1月
Twitter bot「@kokucheese_bot」作成。AppEngineをPythonに乗り換える。それなりの多くの人の役に立っているようで嬉しい限り。

3月
JavaScript強化宣言。今後の主要言語として外せません。継続してフォローしていきたいと思っています。

5月
Androidアプリ「ぐぐっと!急上昇ワード」公開。その後も継続してアップデートし、現在約27,000ダウンロード。こちらも多くの人の役に立っているようで嬉しい限り。

7月
スマートフォン向けJavaScriptライブラリ「iUI」を試す。

9月
注目度がとても高いサーバーサイドJSの「Node.js」をさわってみた。

10月
スマートフォン向けJavaScriptライブラリ「JQuery Mobile」を試す。

11月
AIR for Androidで作成したアプリ「Simple Timer」を公開。
アプリ紹介ページ作成。これもAppEngine上に公開。静的ページだけでもAppEngine。

12月
Twitterのタイムラインをタイムシフト視聴するためのWebアプリケーション作成。これもAppEngineを活用。

キーワードを抽出すると、
  • Google App Engine
  • JavaScript
  • Twitter
  • スマートフォン
  • AIR/AS3
ってところでしょうか。

上記以外にも、RailsやSinatraでrubyに触れたり、NoSQLであるMongoDBを触ってみたり、スマートフォン向けサイトでhtml5&CSS3を使い始めてみたりしてます。あと、Titanium MobileでiPhone向けアプリにも挑戦中です。

仕事では、当時在職していた会社で、メイン事業の携帯アプリのデザインと新規開発の携帯アプリのデザインを手掛けたりしました。
また、たくさんの勉強会やセミナーに参加できて、仕事では関われないようなクラウド系、大規模系、インフラ系等の話が聞けたりしたのもかなりの収穫でした。

それと書籍のレビューをお手伝いし、謝辞を戴いたことも初めての経験でした。

今年1年、たくさんの方々のおかげで、小さいながらも公開できるモノを作ってこれました。この場をかりて厚く御礼申し上げます。
私も誰かの役に立てるようにできるだけ情報発信に努めたいと思っております。
そして近いうちに新しいアプリの公開やWebサービスの実現へ繋げていきたいと考えています。

今年も成長曲線を描けたと思います。(一応このブログのタイトルなので…)
そして来年も(成長曲線を描けるように)頑張りまっせ〜

2010/11/23

アプリの紹介ページを公開

作ろう、作ろうと思いながらも先送りしていたアプリの紹介ページをやっと作りました。
今後は大した手間がかからずに、アプリ紹介ページが作れます。

URLをみるとわかりますが、AppEngineを使っています。が、staticなサイトです。
システム化が必要なほど、たくさんのアプリは作れないと思いまして。。。(なので手動更新です)
しかし、WebアプリじゃなくてもAppEngineを使うのはアリだと思います。

ぐぐっと!急上昇ワード
Simple Timer

AppEngineでstaticなサイトを構築する場合は、app.yamlでそのように設定する必要があります。
私は、下記のように設定しています。
application: アプリ名
version: 1
runtime: python
api_version: 1

handlers:
- url: (.*)/
  static_files: htdocs\1/index.html
  upload: htdocs(.*)/index.html

- url: /(.*\.py)
  script: \1

- url: /favicon.ico
  static_files: htdocs/favicon.ico
  upload: htdocs/favicon.ico
  mime_type: image/x-icon

- url: /(.*)
  static_files: htdocs/\1
  upload: htdocs/(.*)
今回は日本語のページのみ作成していますが、アプリは世界各地に向けて配信できますので、最低でも日本語と英語のサイトは用意したいとか考えると、多言語対応のためだけでもフレームワークを使って開発した方がいいのかなと思います。

そうすると、RailsやCakeで開発した方が作りやすそうとか、AppEngineじゃない方向に行きそうな予感も。。。

2010/11/19

AIR for Androidで作成したアプリを公開してみた

Simple Timer

前回の投稿に書いた通り、AIR for Androidで比較的簡単にAndroidアプリが作成できるということがわかったので、Marketに公開できるアプリを作ってみることにしました。既にJavaで開発したアプリをリリースしていますので、オリジナルAndroidアプリ第2弾はAIRベースとなりました。

先日標準のAndroidにはタイマーアプリが無いことに気づき、とあるアプリをダウンロードしました。このアプリは非常に素晴らしい出来だったのですが、もっとシンプルなものが欲しかったので、タイマーアプリを作ることにしました。

要件
・タイマー機能に特化
・数字は大きく表示したい
・Flashベースなので自由にUIをデザインしたい


ということを元に作ったアプリはこんな画面になりました。


※左下のタイマー設定時間をタッチすると、設定画面が起動します


・99時間59分59秒まで設定可能
・タイマーの一時停止が可能
・アラーム音のON/OFFが可能
・数字を大きくしたいので、画面はランドスケープ固定
・標準のSDKのカスタマイズとはひと味違った自由なデザイン
・Android2.2以上に対応(Adobe AIRが必須)

が特徴になります。

特に設定画面はいろいろ検討した結果、数字ボタンによる入力にしました。
左右キーまたは変更したい数字をタッチすることで選択し、数字を入力します。
これは、よく見るスピナーによる入力が選択肢60個(00〜59)では多すぎると思ったからです。
どうでしょうか、なかなか面白いものができたのではないかと思っています。

※入力に関するUIをフルスクラッチするのは大変ですね
※その反面、自由に画面を作ることができるのは楽しいです

AIR for AndroidはAIRが作れる人にとっては、スキルの有効活用としてはとても良いものだと思います。
PhoneGap等のhtmlベースでアプリを作るのと同じようにパフォーマンスや全APIに対応していない等の課題もありますが、Androidアプリをデザインで差別化するには強力な手段となります。
ターゲットが2.2以上という狭さと、AIR必須という状況がユーザーに受け入れられる環境が来るかどうか、この辺りがAIR for Androidの普及にかかっていると思います。
いずれにせよ、AIR for Androidでアプリを提供するなら、標準のSDKで作成されたアプリとは違った価値を提供しなければと思いました。

※今回のアプリ作成で、Flash CS5+AS3についての理解も深まり、作れるものの幅が広がりました。
※通信して取得したデータを使うとか、カメラやGPSを使うといったアプリも作りたいですね。

2010/11/04

もうそろそろAIR for Androidについて書いておくか(ただしFlash CS5)

実はプレリリースの時に、いくつかサンプルをつくってみたりしたんですが、2.2端末が少ないこともあり放置していました。
最近、AndroidマーケットでAIRが配布開始されたり、SBMのAndroidが全機種2.2だったり、Adobe MAXの影響か、Flexの方面からの盛り上がりを感じているので、AIR for Androidについて書いておきたいと思います。

1.環境構築
Adobe CS5を普通にインストールしてあって、アップデートで最新状態であれば、FlashのエクステンションをインストールすればOKです。
つまり、下記の3つが必要になります。
・Flash CS5
・AIR2.5
・Flashエクステンション(ベータなのでAdobe Labsから)

2.アプリをつくる
正しく環境構築ができていれば、Flash CS5に 新規>テンプレート>AIR for Androidが追加されています。
このテンプレートを使って作業します。
普通にFlashをつくります。フルAS3でもタイムラインを絡めてもいいです。
UI構築が自由にできるのがいいですね。

3.パブリッシュ(apkファイルの作成)
ファイル>AIR Android設定... で専用画面がでますので、ここで諸々設定します。(今回は詳細は割愛します)
※実機をもっていれば、Flashから直接転送デバッグも可能です。

でもって、こんなのをつくってみました。
西暦を和暦に変換するアプリです。

.flaファイルに記述しているActionScriptは以下のような感じです。
普通にMouseEventを記述すれば、Android上のタッチイベントになります。
import flash.events.MouseEvent;

btn_0.addEventListener(MouseEvent.CLICK, inputNum("0"));
btn_1.addEventListener(MouseEvent.CLICK, inputNum("1"));
btn_2.addEventListener(MouseEvent.CLICK, inputNum("2"));
btn_3.addEventListener(MouseEvent.CLICK, inputNum("3"));
btn_4.addEventListener(MouseEvent.CLICK, inputNum("4"));
btn_5.addEventListener(MouseEvent.CLICK, inputNum("5"));
btn_6.addEventListener(MouseEvent.CLICK, inputNum("6"));
btn_7.addEventListener(MouseEvent.CLICK, inputNum("7"));
btn_8.addEventListener(MouseEvent.CLICK, inputNum("8"));
btn_9.addEventListener(MouseEvent.CLICK, inputNum("9"));

btn_c.addEventListener(MouseEvent.CLICK, clearAll);
btn_enter.addEventListener(MouseEvent.CLICK, calc);

function inputNum(num:String):Function {
	return function(e:MouseEvent){
		ad.appendText(num);
	} 
}

function clearAll(e:MouseEvent):void {
	ad.text = "";
	wareki.text = "";
	opt.text = "";
}

function calc(e:MouseEvent):void {
	if(ad.text.length == 4){
		var n:int = int(ad.text);
		if(n>=1868 && n<=2100){
			var year:int;
			if(n<1912){
				year = n - 1868 + 1;
				if(year == 1){
					wareki.text = "明治元年";
				}else{
					wareki.text = "明治" + year + "年";
				}
			}else if(n<1926){
				year = n - 1912 + 1;
				if(year == 1){
					wareki.text = "大正元年";
					opt.text = "※1912年 明治45年7月29日まで、7月30日より大正元年";
				}else{
					wareki.text = "大正" + year + "年";
				}
			}else if(n<1989){
				year = n - 1926 + 1;
				if(year == 1){
					wareki.text = "昭和元年";
					opt.text = "※1926年 大正15年12月24日まで、12月25日より昭和元年";
				}else{
					wareki.text = "昭和" + year + "年";
				}
			}else{
				year = n - 1989 + 1;
				if(year == 1){
					wareki.text = "平成元年";
					opt.text = "※1989年 昭和64年1月7日まで、1月8日より平成元年";
				}else{
					wareki.text = "平成" + year + "年";
				}
			}
		}else{
			wareki.text = "範囲外です";
		}
	}else{
		wareki.text = "4桁入れてね";
	}
}

/*
明治 1868年〜
大正 1912年〜
昭和 1926年〜
平成 1989年〜

1912年 明治45年7月29日まで、7月30日より大正元年
1926年 大正15年12月24日まで、12月25日より昭和元年
1989年 昭和64年1月7日まで、1月8日より平成元年
*/
普通につくったFlash/ActionScriptがAndroidで動きます。感動です。
場合によってはJavaで開発するよりも簡単かも知れません。逆にメニューキーを押したあと(イベントは取れます)の実装はすべて自前?とか、普通のAndroidアプリと似せようとすると面倒かもしれません。ゲームとか標準のUIに縛られないアプリなら良さそうです。

今後2.2端末も増えそうですし、開発の選択肢に検討してみるのもいいかもしれません。
問題はAIRランタイムの容量が大きいことだったり。。。

2010/10/07

ぐぐっと!急上昇ワード Ver.0.6.0

キーワードにあわせてサムネイル画像を表示させたい。

といわけで、今までアプリから直にデータを取得していたのですが、サーバサイドにていったん取得したデータを加工し、取得するという構成に変更しました。
今までアップデートの中で一番大変だったでのブログに書いておこうと思います。

概要はこんな感じになります。


1.キーワード情報(Google)を取得
2.取得したキーワードで画像検索(Yahoo!)を行い、サムネイル画像のURLを取得
3.キーワード情報にサムネイル画像のURLを追加したもの(JSON形式)をデータストアに保存
4.1〜3の処理をcronで定期実行
※サーバサイドはGoogle App Engine(Python)を使っています。

また、今回のアップデートで画面レイアウトの見直しも行い、増えたボタンをスッキリ整理しました。


ボタンを押して検索先を選択するようにしました。当面検索先サイトを増やす予定はないですが、増えても大丈夫なUIです。

たまにキーワードにマッチしない画像を表示したりもしますが、そこはご愛嬌ということで。

機能的には固まってきたので、今後の課題はビジュアル面かな?
まだまだやりますよ!

2010/08/31

「ぐぐっと!急上昇ワード」掲載サイト一覧

公開しているAndroidアプリ「ぐぐっと!急上昇ワード」を紹介・掲載していただいたサイトを一覧にしてみました。
たくさんのサイトでご紹介いただけて嬉しい限りです。


追加分は随時更新していきます。

2010/06/08

Androidアプリ公開後の経過報告

Androidアプリ「ぐぐっと!急上昇キーワード」を公開してから1ヶ月が経過しました。ダウンロード数は5,000を超え、アクティブ・インストール数も4,600以上と、予想を遥かに超える方々に使って戴けているようで嬉しい限りです。


また、本屋でなにげに手に取った「Xperia徹底活用ガイド」に「ぐぐっと!急上昇キーワード」が掲載されているではありませんか。


もちろん記念に購入しました。
※そうやって、掲載されたアプリ作者に買わせる作戦か!? とは思わずに、ここは素直に喜んおきます。

アプリ作って本当に良かった。

2010/05/08

Androidアプリを公開しました

「ぐぐっと!急上昇ワード」というアプリをつくり、AndroidMarketに公開しました。
Google急上昇キーワードを取得して、気になったキーワードを調べたりできるアプリです。

イメージしているUIを実現する技術力がないので、見た目がつまらないのですが、第一弾としては欲張らずに機能実装と公開を目標にして取り組みました。よかったら試してみてください。
※マーケットへのリンクの仕方が分からないので、とりあえずAndrolibのリンクを貼っておきます。ぐぐっと!急上昇ワード

最後に4/17のAndroidコードラボでお世話になりました@tmatsuoさん、チューターを務めていただきました日本Androidの会の方々に御礼申し上げます。
また、参考にさせていただきた書籍やサイトを書かれた方々もありがとうございます。

追記:
5/11 Googleリアルタイム検索に対応するバージョンを公開しました。