できたこと

カスタムROMハッカソン(http://atnd.org/events/31335)にいってきました。

  • Androidのナビゲーションバーに機能をカスタマイズできるキーを追加!
  • VPSでAndroidをビルドしたよ(GMOさんのお名前.com VPSをお借りしました)

カスタマイズキーの動作をアプリレベルで制御する仕組みを考えました。興味ある人は最後のほうまで読むといいかも。
f:id:hdk_embedded:20120825101308j:image:w320

どんなハッカソン?

f:id:hdk_embedded:20120825175434j:image:w240
GMOさんのオフィス内シナジーカフェ GMO Yoursにおじゃまして、ケータイの「こうだったらイイのに」を考えて、オリジナルのAndroid端末を作ってみる、というチャレンジングなハッカソンです。別名カスタムROMハッカソン。会場のカフェ入り口はかなりかわいいクマー。おかりしたVPSは仮想10core、メモリ16GB、ストレージが1000GB。ものすごい高性能。

どんなかんじ?

f:id:hdk_embedded:20120825160034j:image:w360
4チーム(各チーム5,6人)に分かれて作業。オリジナルAndroidをつかってもよかったけど、いじりやすさから、ほぼみんながJCROMをベースに作業してました。VPS上でビルドしてカスタムROMを作成します。
Ubuntuインストール→リポジトリダウンロード→ビルド。チームごとコンセプトを形にしてというのが発表会までの流れ。うちのチームは @chun_ryo @furusin_oriver @c1e @rey_k さんたちとぼくを合わせた5人でした。

なにをつくったの?

ももクロフォンを作成しました。ちょっとアイドルちっくですが、
やったことは「動作をカスタマイズできる」仮想キーを追加したことです。

Androidではハードウェアキーからバーチャルなソフトウェアキーへ舵を切っています。既定されたキー以外にもカスタマイズできる余地があると考えて、ただのショートカットではなくてインテリジェンスな動きをしたいね、という話で進みました。

  • ソフトウェアキーを生かしてキーのカスタマイズ
  • 今、アクティブな最前面のアプリの種類に応じて動きを変えられる

がポイント。ただのボタンではなく、動作をサジェストしてくれるAIぽいアプリをつくり、アプリとして動かすことでGoogle Play経由で簡単に動きを変更できる仕組みをつくってみました。
f:id:hdk_embedded:20120826075036j:image:w150 f:id:hdk_embedded:20120826075219j:image:w150 f:id:hdk_embedded:20120826003610p:image:w150
(技術解説用スクリーンショットです。テーマは私的使用の範囲でお願いします…)

「ももクロ」をテーマにチームで作りました。 @R246さんリスペクト。
主な仕組みは以下の通りです。

  1. 追加のカスタマイズキー(NavigationBarの追加アイコン)から暗黙的Intent飛ばす
  2. 暗黙的Intentを受けて動作を決定するサジェスチョンするアプリをServiceとして実装
  3. Serviceから今起動中のアプリに明示的イベントを飛ばす
  4. 起動中のアプリ側は、明示的イベントに応じた動きをする(たとえばGoogle Playでは、「ももくろ」で検索するなど)

技術的にはフレームワークであるSystemUIとアプリを暗黙的Intentでつなぐ点、アプリレベルで最前面のActivityを探して、アプリごと動きを変更できる点の2つが工夫したところ。

Androidのビルドはすごく時間がかかって敷居が高いと思っていたのですが、チームメンバのすばやいフレームワーク解析、機能実装、テーマ作りこみで無事、完成させることができました。

VPSを提供してくれたGMOさん、主催してくれたなかじま、ありがとう!