2015.06.02   |   Android

AndrodWearアプリを作って公開してみた

前回の記事の最後でもちょっと触れましたがAndroidWearアプリ作ってみました。

00:10:00 10Seconds.
00:00:00 10秒の天才を目指せ!

ストップウォッチを10秒ジャストで止める遊びをゲームにしてみました。
Wear持ってる方は是非遊んでもらえると。

Wearアプリの開発はどんな感じなのか

今回Wearアプリ初めて作ってみたのですが、意外と簡単というかほぼ通常のAndroidアプリを作る感覚でアプリが作れることに驚きました。AppleWatchみたいにWatch上では色々制約があるのかと思っていたのですが、Wearの場合全然そんなことは無く普通のAndroidのシステムが利用できます。画面の形状が特殊なAndroidだと思って開発すれば特に苦戦せず作れるかと。

Wearアプリを開発して公開する場合、スマートフォンのアプリに抱き合わせる形で配布することになります。そのため実質スマートフォン用とWatch用の2つアプリを作成する必要があるので作る際は結構手間がかかります。(スマートフォン側のActivityをManifestで見えなくしてWear専用っぽく見せる事は可能ですが…。)

また、2つのアプリでコードやリソースも分離してしまうので、共通のロジックや画像を使いたい場合は適宜コピペして使う必要があります。共通モジュールを作ってそこから読むようにすればうまく再利用出来るのかもしれませんが試せてません。ベストプラクティスみたいなの探ってみたいです。

開発でのハマりどころ

WearからMobileへの通信

Android WearからMobileへメッセージを送る - Qiita
ここを参考にWearからスマートフォンにメッセージを飛ばす実装をしてみたのですがうまく飛ばせませんでした。送信成功のステータスは返ってくるのですが、モバイルの方には一切メッセージが飛んできません。なのでずっとモバイル側のアプリのデバッグを試みていたのですが、実際の原因はモバイルのアプリにありました…。

Wearable.MessageApi.sendMessage(client, nodes.get(0).getId(), message, null);

Node(Wearに紐付く端末)のリストから先頭を取ってきてメッセージを送るプログラムになっているのですが、どうも0番目の端末=スマートフォンとは限らないみたいです。スマートフォンとWearを1対1で対応づけているはずなのですが、Nodeリストの0番目を指定して送信するとよく分からないどこかへメッセージを飛ばしてしまっているみたいです。この部分を全ノードに飛ばすようにしたら無事メッセージの送受信をすることが出来ました。正しいNodeの選び方がないのか今度調べてみようと思います。

Wearアプリをスマートフォン用アプリにバンドルする

Wearアプリを配布するにはスマホ向けアプリにバンドルする必要があるのですが、ここでもハマりどころがありました。APKを作成してスマートフォンにインストールしても自動でWearに入ってくれなくて結構苦戦しました。

結果から言うとWearアプリが自動でインストールされるには以下の条件を満たす必要があるみたいです。

  • 証明書付きのリリースビルドである
  • applicationIdとbuildVersionがwearとmobileで同じ
  • Wearで利用しているパーミッションがすべてMobileのマニフェストにも記載されている
  • Mobileのbuild.gradleに wearApp project(':wearable') が記載されている

この条件を満たさないと自動インストールが行われないみたいです。なのでDebugビルド時とは自分でAPKをadb経由で送り込む必要がありますし、リリースビルドでもGradleやAndroidManifestに不整合があるとうまく入ってくれないみたいです。自分の場合Manifestのパーミッションが足りてませんでした。Wear上でVIBRATEやWAKE_LOCKの権限を利用するときは忘れずにMobileの方のマニフェストにも記載しておきましょう。あとWearへのアプリ同期が結構時間かかる時あるので、管理アプリから手動同期するなどしてちゃんとインストール出来るか確かめてみたほうが良さそうです。

GooglePlayにアップロードする

WearアプリをGooglePlayにアップロードするときは、いつものように「Generate Signed APK...」をしてAPKを作ります。この時APKが2つ作られますが、ストアに申請するのはmobile-release.apk だけです。wear-release.apk をアップロードしてもデベコンではエラーになりませんが、アプリインストール可能端末がWearだけになり、Wearからは直接ダウンロードできない(多分)ので、どこからもダウンロードできないような事態になってしまいます。アップロードの際は気をつけましょう。

あとWear対応アプリをアップロードするとDeveloperConsoleの「価格と販売/配布地域」内に「Android Wear にアプリを配信します。」というチェックボックスが出現します。ここにチェックを入れるとGoogleの中の人が審査をして、パスすればGooglePlayのWearページに載ることが可能みたいです(ただし載せるとは言っていない)。Wearアプリを作った際は忘れずに審査してもらいましょう。自分の場合2日ほどで審査パスしました。ただ今のところGooglePlay上で掲載はされてないみたいです…。